PHP和c++的UTF-8编码单位倒序中文字符
PHP and C++ for UTF-8 code unit in reverse order in Chinese character
中文单词"的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有什么问题吗?解决办法呢?
他们都是正确的。不同之处在于尾端顺序。
我的猜测是UTF-16将默认输出小端字符串。您可以通过使用UTF-16BE来强制大端序。
那个,或者正好相反;)
注意这些不是unicode码点,而是UTF-16BE/LE/UCS-2字节表示。代码点是一组不同的数字。
EDIT:在mb_convert_encoding
中使用UTF-16LE
将使您得到相反的表示。
相关文章:
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- C++中的MSD基排序(字典序)
- 为什么我的递归函数按降序打印,然后按升序打印?
- RcppEigen 模板化函数,用于填充单位法线
- 将字节数组转换为带有字节序问题的指针
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 以天C++为单位的两个时间戳之间的差异
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 我正在尝试按降序对地图进行排序,但没有得到预期的结果?
- 如何以毫秒为单位获取开始时间和 now() 之间的毫秒差异(以 C++为单位?
- 从原始字节解码协议缓冲区(以 C++为单位)
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- ANTLR - 如何从维度扩展单位
- C++抽象的字节序是中立的吗?
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 编写以 C++ 为单位返回值的函数
- c++ next_permutation,不以倒序列出
- 在Google Code jam上问的一个c++句子的倒序
- PHP和c++的UTF-8编码单位倒序中文字符
- 按倒序打印输入字符串