TCHAR fonctions de sécurité - paramètres de comptage pour UTF-8 constantes
Question
Je portage une bibliothèque de char à TCHAR. le paramètre de comptage de ce fragment, selon MSDN, est le nombre de caractères multi-octets, et non le nombre d'octets. donc, ai-je ce droit? Mes propriétés du projet en dire VC9 'jeu de caractères unicode utilisation et je pense que c'est correct, mais je ne suis pas comment que mon impact paramètre de comptage.
_tcsncmp(access, TEXT("ftp"), 3); //or do i want _tcsnccmp?
"pris en charge sur les plates-formes Windows, les versions _mbsncmp et _mbsnbcmp sont multi-octets de strncmp. _Mbsncmp compare à la plupart des caractères nombre multi-octets et _mbsnbcmp comparera au plus nombre octets. Elles utilisent la page de code multi-octets.
_tcsnccmp et _tcsncmp sont les fonctions génériques correspondant à _mbsncmp et _mbsnbcmp, respectivement. _tccmp est équivalent à _tcsnccmp ».
Une question similaire est _tcslen vs _tcsclen.
La solution
Oui, vous l'obtenez droit.
La question, cependant, est la raison pour laquelle le port ne vous à TCHAR -. Quelque chose qui est sensible à définir _UNICODE
Pourquoi ne pas utiliser UTF8 et char *?
Autres conseils
TCHAR
est un type qui est soit 8 ou 16 bits selon que _UNICODE
est définie. Mais UTF-8 toujours utilise des unités de code 8 bits, donc l'utilisation TCHAR
est stupide. Il suffit d'utiliser char
.
TCHAR
est liée à l'existence de deux versions de l'API Windows: "A" fonctions que les pages legacy utilisation de code 8 bits, et "W" fonctions que l'utilisation UTF-16. UTF-8 est pas prise en charge . Vous pouvez utiliser UTF-8 sous Windows en convertissant explicitement vos chaînes de caractères UTF-8 en UTF-16 pour les appels API, mais vous ne recevrez aucune aide de _UNICODE
ou TCHAR
.