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