中文单词你好的 unicode 码位分别为 4F60 、 597D 。我从这个工具得到的http://rishida.net/tools/conversion/
下面的控制台应用程序会将你好的十六进制字节序列打印为 60:4F:7D:59 。如您所见,它与每个字符的 unicode 代码点的顺序相反。先60后4F,而不是4F后60。为什么会这样?谁是正确的?工具或控制台应用程序?或两者 ?
void printHex (char * buf, char *filename)
{
FILE *fp;
fp=fopen(filename, "w");
if(fp == NULL) return;
int len2 = sizeof(buf);
int i;
char store[10];
for (i = 0; i < sizeof(buf); i++)
{
if (i > 0) fprintf(fp,":");
//sprintf(store, );
fprintf(fp,"%02X", buf[i]);
}
fprintf(fp,"\n");
fclose(fp);
}
int main(int argc, char* argv[])
{
char * str3 = (char*)(L"你好");
printHex( str3, "C:\\Users\\william\\Desktop\\My Document\\test2.txt");
return 0;
}
当我在 PHP 中使用这个 mb_convert_encoding 函数时。
echo bin2hex(mb_convert_encoding("你好", "UTF-16", "UTF-8")); //result : 4f60 597d
echo bin2hex(mb_convert_encoding("恏絙", "UTF-16", "UTF-8")); //result : 604f 7d59
PHP的结果与在线工具相同,但是当我使用这种编码在打印机上使用php_printer.dll函数打印你好时,打印输出变成恏絙,反之亦然。但是 C++ 应用程序可以正确打印出来。PHP 可能有什么问题?和解决方案?