UTF8 char到十六进制值字符串

时间:2016-01-02 14:38:03

标签: c++ utf-8 utf8-decode

我需要一种方法将字符转换为十六进制值作为字符串。

我尝试了几种方法,但所有方法都忽略了UTF8字符。

例如:

取角色:

  

取值

如果转换正确,则其十六进制值为0x15E,但此代码只返回0x3F,这只是字符?

wchar_t mychar = 'Ş';
cout << hex << setw(2) << setfill('0') 
                  << static_cast<unsigned int>(mychar);

我找到了一个javascript函数,它正是我需要但无法将其转换为c ++ Here

由于

2 个答案:

答案 0 :(得分:1)

问题是您要为char分配wchar_t mychar字面值。因为char只有一个字节长,所以它不能存储字符Ş。您必须在文字前加上L,如下所示:

wchar_t mychar = L'Ş';

关于Unicode,编码等的一篇非常好的文章是Joel Spolsky的The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

答案 1 :(得分:0)

即使你用L作为前缀,类型wchar_t也不能很好地处理国际字符集。

试试这个:

char16_t mychar16 {u'Ş'}; // Initialized with UTF-16 code
char32_t mychar32 {U'Ş'}; // Initialized with UTF-32 code

cout << showbase << hex << setw(12) << setfill('0')
     << std::setiosflags(ios::left | ios::hex) 
     << static_cast<unsigned int>(mychar16) << endl;

结果:

0x15e0000000

适用于类型 wchar_t 的字符编码是实现定义的,因此它可能因编译器而异。  char16_t和char32_t类型更适合处理Unicode字符。