PHP和C++;UTF-8编码单元在汉字中的倒序

PHP和C++;UTF-8编码单元在汉字中的倒序,php,c++,c,utf-8,cjk,Php,C++,C,Utf 8,Cjk,中文单词的unicode代码点你好 分别为4F60、597D。我从这个工具里得到的 下面的控制台应用程序将打印出你好 同于60:4F:7D:59。正如您所看到的,每个字符的unicode代码点的顺序是相反的。先60,然后是4F,而不是4F,然后是60。为什么会这样?谁是对的?工具还是控制台应用程序?或者两者都有 void printHex (char * buf, char *filename) { FILE *fp; fp=fopen(filename, "w");

中文单词的unicode代码点你好 分别为4F60、597D。我从这个工具里得到的

下面的控制台应用程序将打印出你好 同于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的结果与在线工具相同,但当我使用此编码打印时你好 在使用php_printer.dll函数的打印机上,打印输出变为恏絙 反之亦然。但是C++应用程序可以正确打印出来。PHP有什么问题?解决方案呢?

他们都是正确的。区别在于endian结构

我的猜测是,UTF-16默认情况下会将字符串输出为little endian。您可以使用UTF-16BE来强制大端性

或者正好相反;)

请注意,这些不是unicode代码点,而是UTF-16BE/LE/UCS-2字节表示。代码点是一组不同的数字


编辑:在
mb\u convert\u编码
中使用
UTF-16LE
将为您提供反向表示。

它们都是正确的。区别在于endian结构

我的猜测是,UTF-16默认情况下会将字符串输出为little endian。您可以使用UTF-16BE来强制大端性

或者正好相反;)

请注意,这些不是unicode代码点,而是UTF-16BE/LE/UCS-2字节表示。代码点是一组不同的数字

编辑:在
mb\u convert\u编码
中使用
UTF-16LE
将为您提供反向表示。

OMG,我非常爱您:)花了将近一周的时间,深入研究PHP C源代码,然后使其正常工作。非常感谢。mb_转换_编码(“你好", "“UTF-16LE”,“UTF-8”)天哪,我太爱你了:)花了将近一个星期的时间,钻研了PHPC源代码,然后才开始工作。非常感谢。mb_转换_编码(“你好", "UTF-16LE,“UTF-8”)
echo bin2hex(mb_convert_encoding("你好", "UTF-16", "UTF-8")); //result : 4f60 597d
echo bin2hex(mb_convert_encoding("恏絙", "UTF-16", "UTF-8")); //result : 604f 7d59