Je développe un jeu pour les fenêtres à des fins d'apprentissage (j'apprends DirectX). Je voudrais qu'il soit supporté par l'UTF.de Windows jeu: UTF-8, UTF-16, DirectX et Lua
Reading this question J'ai appris que Windows utilise wchar_t
, qui est UTF-16. Je veux que mon jeu prenne en charge les scripts Lua, et Lua doesn't really like Unicode much .. Il traite simplement les chaînes comme un "flux d'octets"; cela fonctionne assez bien pour UTF-8, mais UTF-16 serait pratiquement impossible à utiliser.
Longue histoire courte: fenêtres veut UTF-16, Lua veut UTF-8.
Alors j'ai pensé, utilisons simplement UTF-8 avec char*
et string
! .length()
sera foiré mais qui s'en soucie? Cependant, il ne fonctionne pas:
const char test_utf8[] = { 111, 108, 0xc3, 0xa9, 0 }; // UTF-8 for olè
mFont->DrawTextA(0, test_utf8, -1, &R, DT_NOCLIP, BLACK);
/* DrawText is a Direct3d function to, well, draw text.
* It's like MessageBox: it is a define to either DrawTextA
* or DrawTextW, depending if unicode is defined or not. Here
* we will use DrawTextA, since we are passing a normal char*. */
Cette imprime olé
. En d'autres termes, il ne semble pas utiliser UTF-8 mais plutôt ISO-8859-1.
Alors, que puis-je faire? Je peux penser à ce qui suit:
- Abandonner l'idée de UTF; utiliser ISO-8859-1 et être heureux (ce que World of Warcraft fait, au moins pour la version enUS)
- Convertir chaque chaîne à chaque image de UTF-8 en UTF-16 (je suis inquiet les problèmes de performance, cependant, étant donné qu'il le fera plus de 60 fois par seconde pour chaque chaîne et il est O (N) Je suis sûr que ce sera assez lent)
- pour chaque chaîne de lua conserver une copie UTF-16; énorme perte de mémoire, très difficile à mettre en œuvre (en gardant les UTF-16 chaînes à jour quand ils changent en Lua, etc.)
vous devez convertir l'UTF-8 char * (ou std :: string) dans la chaîne large avant de l'utiliser avec API Windows Heureusement, l'API contient une fonction pour cela, mais je ne me souviens plus de ce qu'on appelle. – Tronic
Pourquoi ne conservez-vous pas toutes vos chaînes au format UTF-16?Vous voulez garder les chaînes de votre code dans les ressources de toute façon, non? –
@John: ce sont probablement des chaînes générées dans les scripts Lua (et donc hors du contrôle du programme de base). – Amber