J'ai beaucoup de fichiers XML nommés en japonais. J'utilise Lua pour les lire et mettre les informations nécessaires dans les tableaux. Je pourrais ouvrir des fichiers nommés seulement dans un seul kanji comme 名 .xml, mais pour plusieurs kanjis comme 名 前 .xml c'était contrawise. Avant de lancer le fichier Lua, j'ai défini la page de code de la ligne de commande sur 65001 (sous la forme UTF-8). Et pour lire les fichiers j'ai besoin d'encoder le nom de fichier en utilisant la bibliothèque WinAPI de ACP (page de code ASCII?) À UTF-8, mais cet encodage ne fonctionne que pour les kanjis simples. J'ai essayé plusieurs suggestions sur Internet, en utilisant un chemin court vers le fichier, etc., mais aucun d'entre eux n'a fonctionné. J'ai essayé d'utiliser le court chemin en exécutant Lua en tant qu'administrateur - comme indiqué dans d'autres questions similaires, vous avez besoin d'administrateurs pour utiliser le raccourci - mais pas de chance.Ouverture des fichiers nommés en japonais dans Lua
...
for fn in io.popen("DIR xml /B /AA"):lines() do
...
local f = assert(io.open("xml\\" .. winapi.encode(winapi.CP_UTF8, winapi.CP_ACP, fn), "rb"))
...
end
...
Mais mon code produit erreur "Argument non valide". J'ai cherché cette erreur mais aucune d'entre elles n'est liée à Lua, donc j'ai ouvert le C/C++, mais ce que j'ai obtenu était seulement 'utiliser _wfopen
' ou quelque chose comme ça. Ce n'est pas implémenté dans Lua et je ne veux pas non plus l'implémenter moi-même. Donc, quelqu'un a une idée de comment résoudre ce problème? Pour plus d'informations, assurez-vous de me le faire savoir. Merci!
Que renvoie 'winapi.encode()'? S'il vous plaît montrer la sortie de 'print (fn: byte (1, -1)); print (winapi.encode (winapi.CP_UTF8, winapi.CP_ACP, fn): octet (1, -1)) 'pour un nom de fichier court (par exemple," 名 前 .xml ") –
Et quelle est votre ACP (page de codes ansi) ? Vous pouvez l'afficher dans le registre Windows 'HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Contrôle \ Nls \ CodePage \ ACP' –
@EgorSkriptunoff De UTF-8:' 229 144 141 229 137 141 46 120 109 108' à ACP: '150 188 145 79 46 120 109 108' et mon ACP est 932. – Ortimh