Est-il sûr de supposer que toutes les plates-formes Windows seront dans UCS-2 LE?

Je lie un fichier texte à mon projet en l’ajoutant à la ressource, puis en le chargeant.

J’utilise LockResource et un static_cast pour le lancer en std::wssortingng
std::wssortingng sData(static_cast(pData));

Mon projet utilise UNICODE (windows), c’est pourquoi j’utilise std::wssortingng et wchar_t .

J’ai découvert que je devais définir l’encodage dans le fichier sur UCS-2 LE, sinon il serait simplement lu charabia. Je suppose que c’est parce que c’est ce que Windows utilise.

Ma question est la suivante: est-il sûr de supposer que tous les systèmes d’exploitation Windows utilisent actuellement UCS-2 LE? Je ne veux pas courir dans un système utilisant UCS-2 BE (ou autre chose). Mon programme s’écraserait horriblement.

Je pourrais enregistrer le fichier dans ANSI, puis le convertir à ce que le système d’exploitation utilise avec MultiByteToWideChar , mais ce serait une perte de temps s’il était définitivement UCS-2 LE.

Toutes les versions récentes et actuelles de Windows (sauf XBox) utilisent UTF-16 LE.

Notez qu’il y a un bogue avec la façon dont vous initialisez la variable de chaîne:

 std::wssortingng sData(static_cast(pData)); 

Cela suppose que la ressource se termine par une terminaison (deux octets) 0, ce qui n’est pas garanti si vous ne faites que référencer le fichier dans vos ressources. Vous devez obtenir la taille de la ressource et utiliser le constructeur à deux points pour sData.

Si vous êtes préoccupé par le temps (comme suggéré par votre commentaire sur l’utilisation de MultiByteToWideChar ), vous devez savoir que vous copiez les données de la ressource dans la mémoire dynamic, et cette copie est probablement presque aussi lente que la conversion. Si vous ne le faites qu’une fois, je ne m’inquiéterai pas de la vitesse. Je sauvegarderais le texte sous UTF-8 et utiliserais MultiByteToWideChar , surtout si le codage UTF-8 est plus efficace pour votre texte, car cela réduirait la taille de votre binary.

Si speed est un problème (et si vous n’avez pas besoin de modifier la chaîne au moment de l’exécution), je n’utiliserais pas du tout de std::wssortingng . Je ferais une classe qui fournit une interface similaire, mais elle pointe directement vers la mémoire de ressources plutôt que de copier le texte entier dans la mémoire dynamic. Cela économise du temps de chargement et de la mémoire.

Toutes les versions de Windows sont LE et je ne pense pas que Microsoft ait un plan pour changer son système d’exploitation en BE. et Windows NT 5 (Win2K) et versions ultérieures sont tous basés sur UTF-16, donc oui, il est toujours prudent de supposer que Windows est UCS-2 LE