将文件中的utf-8个字符转换为十六进制

时间:2017-06-22 02:02:13

标签: c++ windows utf-8

文本文件中有一些utf-8字符,我想处理它们并将它们转换为十六进制格式,将它们的十六进制值写入另一个文件,这样做的最佳方法是什么? 我知道wstring,wchar但是它们不能存储utf-8字符,char16_t和char32_t可以存储但是它们不支持iostream。有些人建议使用ICU库,但要求是最好不要使用外部库。

2 个答案:

答案 0 :(得分:1)

如果您不想使用外部库,那么您基本上有两个选择:

如果文件足够小以适合内存,则可以使用MultiByteToWideChar。如果BMP之外有任何代码点,那么你必须处理代理对。

如果你知道如何测试和移位一个字节中的位,那么解析自己也不是那么难。维基百科有一个漂亮的good article提供了大部分细节......

答案 1 :(得分:0)

我希望它有所帮助:
int ascii_to_utf8(unsigned char c, char * out) { int len = 0; char x = 0; if(c < 128) { out[0] = c; len = 1; } else { out[0] = (c >> 6) | 0xC0; out[1] = (c & 0x3F) | 0x80; len = 2; } return len; }

int utf8_to_ascii(unsigned char * c, char * out) { int len = 1; if(*c > 0xC0) { * out = (( c[0] << 6 ) & 0xC0 ) | ( c[1] & 0x3F ); len = 2; } else { * out = * c; } return len; }