首页 文章

UTF8的语言环境是什么?

提问于
浏览
2

我从facebook api获取了一个带有数据的XML文件:

<?xml version="1.0" encoding="UTF-8"?> 
&ltfql_query_response xmlns="api.facebook.com/1.0/"; xmlns:xsi="w3.org/2001/XMLSchema-instance"; list="true"> 
    &ltuser> 
        &ltuid&gt100000022063315</uid> 
        &ltname&gt0xD7 0x99 0xD7 0x95 0xD7 0x97 0xD7 0x90 0xD7 0x99 0x20 0xD7 0x95 0xD7 0x9B 0xD7 0x98 0xD7 0xA8</name> 
    </user>
</fql_query_response>

我想将UTF-8翻译成wchar_t . 我试图用mbstowcs这样做,但显然我需要知道要设置的语言环境 . Facebook有标准的区域设置吗?还是对于utf8?

3 回答

  • 0

    要转换's not associated with the user'配置的语言环境,而不是显式指定的编码,您应该使用 iconv ,而不是 mbsrtowcs . 你根本不需要 setlocale .

  • 4

    正如@pst所说,这里的术语有点不对劲 . “区域设置”有时用于指代在unicode不可用时使用哪个ANSI代码页来表示国际文本 .

    阅读Joel Spolsky的精彩内容"The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)"

    现在,要回答您的问题,如果您需要将UTF-8编码的文本转换为UTF-16(或Windows中的通常称为"wide char"),您可以使用MultiByteToWideChar等函数和参数 CP_UTF8

  • 5

    这是a little discussion我刚开始就这个问题开始了 .

    基本上,我个人会在编码处理上区分两个不同的路径:

    • 一个是与编码无关的"internally portable"路径,它使用 mbstowcs 转换来自 char * argv[] 的外部多字节数据并将其转换为内部的固定宽度宽字符串,所有这些都没有谈论编码 .

    • 另一个是固定编码,可序列化的路径,用于处理以确定性编码方式发布的数据 . 为了在这些中进行翻译,Posix iconv 库可以解决问题 .

    • 您可以使用 iconv 的特殊WCHAR_T编码在两条路径之间架起桥梁 .

    由于您描述的情况需要您阅读序列化的确定性数据,我建议使用iconv转换FROM UTF8(您知道的)并转换为WCHAR_T,然后您可以使用标准C宽字符串函数处理(但是不要对实际编码做出假设) . 如果您需要将数据打印到控制台,您可以始终从内部宽字符串 wcstombs 到控制台告诉您需要的多字节表示(其详细信息不再是您关心的) .

相关问题