J'ai un projet VC++ dans Visual Studio 2008.
C'est définir les symboles pour l'unicode sur la ligne de commande du compilateur ( /D "_UNICODE" /D "UNICODE"
), même si ce symbole n'est pas activé dans la section du préprocesseur du projet.
En conséquence, je compile avec les versions Unicode de toutes les fonctions de la bibliothèque Win32, par opposition aux versions ANSI. Par exemple, dans WinBase.h, il y a :
#ifdef UNICODE
#define CreateFile CreateFileW
#else
#define CreateFile CreateFileA
#endif // !UNICODE
Où l'unicode est activé dans le projet VC++, comment puis-je le désactiver ?
9 votes
Maintenant, la vraie question : Pourquoi - pour l'amour du ciel - espérez-vous obtenir quelque chose en désactivant le support UNICODE ? Ce doit être la toute première fois que je vois quelqu'un demander de l'aide pour passer en mode échec.
3 votes
Si vous avez du code hérité à supporter ? Nous avons un tas de bibliothèques qui utilisent char/TCHAR de manière interchangeable par exemple, depuis 15 ans.
0 votes
@IInspectable : La prise en charge d'Unicode n'est pas synonyme de déplacement
char
awchar_t
qui est la façon merdique qu'a Windows de faire de l'"Unicode". Je préfère UTF-8 à une implémentation bâclée d'UTF-16.2 votes
@ThomasEding : Sur Windows,
wchar_t
est synonyme d'encodage Unicode/UTF-16LE. Qu'il soit merdique ou non, il s'agit du codage de caractères natif de Windows, exposé par l'intermédiaire de l'API Windows. Si vous souhaitez vous interfacer avec lui, vous devez apprendre à l'apprécier. Par ailleurs, les chaînes .NET utilisent également le codage UTF-16. Il en va de même pour NTFS. Ou les chaînes Java.2 votes
J'utiliserai une bibliothèque C++ UTF-8 lorsque je travaillerai avec C++, merci. Maintenant mon code fonctionne aussi sous Linux. Les merveilles !
4 votes
Vous pouvez utiliser une bibliothèque C++ UTF-8 autant que vous voulez, mais vous devrez toujours convertir ces chaînes UTF-8 en chaînes UTF-16 afin de vous interfacer avec l'API native de la plate-forme. Ainsi, la définition de
UNICODE
permet de s'assurer que vous ne vous trompez pas et que vous ne passez pas accidentellement une chaîne UTF-8 (typée en tant quechar
) à une fonction de l'API qui attend une chaîne de caractères ANSI (également typée en tant quechar
(très différent de l'UTF-8). Notez que, contrairement aux attentes de certains programmeurs, l'UTF-8 est pas une page de code ANSI valide sous Windows. @thomas