desarrolladores de software populares y las empresas (Joel Spolsky, Fog Creek software) tienden a utilizar wchar_t para el almacenamiento de caracteres Unicode al escribir código C o C++. ¿Cuándo y cómo debe uno usar char y wchar_t con respecto a las buenas prácticas de codificación?Uso correcto de almacenamiento de cadenas en C y C++
Estoy particularmente interesado en POSIX conformidad al escribir software que aprovecha Unicode.
Al utilizar wchar_t, puede buscar caracteres en un array de caracteres anchos en función de cada carácter o por-array de elementos:
/* C code fragment */
const wchar_t *overlord = L"ov€rlord";
if (overlord[2] == L'€')
wprintf(L"Character comparison on a per-character basis.\n");
¿Cómo puede comparar bytes Unicode (o caracteres) cuando se usa char?
Hasta ahora mi forma preferida de la comparación de secuencias y caracteres de tipo Char en C a menudo se parece a esto:
/* C code fragment */
const char *mail[] = { "ov€[email protected]", "ov€[email protected]" };
if (mail[0][2] == mail[1][2] && mail[0][3] == mail[1][3] && mail[0][3] == mail[1][3])
printf("%s\n%zu", *mail, strlen(*mail));
exploraciones de este método para el byte equivalente a un carácter Unicode. El símbolo del Euro Unicode € ocupa 3 bytes. Por lo tanto, es necesario comparar tres bytes de matriz char para saber si los caracteres Unicode coinciden. A menudo necesita saber el tamaño del carácter o cadena que desea comparar y los bits que produce para que la solución funcione. Esto no parece una buena forma de manejar Unicode en absoluto. ¿Existe una mejor manera de comparar cadenas y elementos de caracteres del tipo char?
Además, al usar wchar_t, ¿cómo se puede escanear el contenido del archivo en una matriz? La función fread no parece producir resultados válidos.
Unicode en C++: no use 'wchar_t', use una biblioteca Unicode adecuada. –
'tienden a usar wchar_t para codificación de caracteres Unicode'. No; lo usan para el carácter _storage_ de Unicode, y hay una gran diferencia. –
posible duplicado de [std :: wstring VS std :: string] (http://stackoverflow.com/questions/402283/stdwstring-vs-stdstring) –