PHP i C ++ dla jednostki kodu UTF-8 w odwrotnej kolejności w chińskim znaku
Punkt kodowy Unicode dla chińskiego słowa 你好 wynosi odpowiednio 4F60, 597D. które otrzymałem z tego narzędziahttp://rishida.net/tools/conversion/
Poniższa aplikacja konsoli wyświetli szesnastkową sekwencję bajtów 你好 jako 60: 4F: 7D: 59. Jak widać, jest to w odwrotnej kolejności niż kod Unicode dla każdego znaku. 60 najpierw, potem 4F, zamiast 4F, potem 60. Dlaczego tak jest? Kto ma rację? Narzędzia lub aplikacja konsoli? Lub obie ?
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;
}
Będąc w PHP, gdy używam tej funkcji 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 ma taki sam wynik jak narzędzie online, ale gdy używam tego kodowania do drukowania 你好 na drukarce przy użyciu funkcji php_printer.dll, wydruk staje się 恏 絙 i odwrotnie. Ale aplikacja C ++ może drukować poprawnie. Co może być nie tak z PHP? I rozwiązanie?