PHP e C ++ para unidade de código UTF-8 em ordem reversa em caracteres chineses
O ponto de código unicode para a palavra chinesa 你好 é 4F60, 597D, respectivamente. que eu recebi dessa ferramentahttp://rishida.net/tools/conversion/
O aplicativo de console abaixo imprimirá a sequência de bytes hexadecimal de 你好 como 60: 4F: 7D: 59. Como você pode ver, é na ordem inversa do ponto de código unicode para cada caractere. 60 primeiro, depois 4F, em vez de 4F, depois 60. Por que é assim? Quem está correto? As ferramentas ou o aplicativo de console? Ou ambos ?
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;
}
Enquanto no PHP quando eu uso essa função 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
O PHP tem o resultado mesmo que a ferramenta online, mas quando eu uso esta codificação para imprimir 你好 em uma impressora usando funções php_printer.dll, a impressão se torna 恏 絙 e vice-versa. Mas o aplicativo C ++ pode imprimir corretamente. O que poderia estar errado com o PHP? E a solução?