2017-09-20 15 views
3

voici mon code:comment puis-je utiliser io.open pour ouvrir un chemin unicode lua

local path = "C:/Users/KayWang/Desktop/测试.txt" 
local file,err = io.open(path,"rb") 
print(file,err) 

et c'est la sortie:

nil C:/Users/KayWang/Desktop/测试.txt: No such file or directory 

Je ne veux pas utiliser winapi et je veux vraiment savoir pourquoi cette fonction ne peut pas supporter le chemin unicode?

+1

Les fonctions de bibliothèque standard de Lua n'acceptent les noms de fichiers que dans la page de codes natif du système d'exploitation. Pour Lua sur Windows, vous devez manuellement convertir les noms de fichiers de UTF-8 à votre page de codes Windows (probablement, le vôtre est CP936) avant d'appeler 'io.open'. –

+0

merci! Je convertis les noms de fichiers de UTF-8 en GBK, et ça marche! – KayWang

Répondre

1

En général, cela n'est pas possible.

E.g. mon système Windows a par défaut cp-1251 (russe) donc je ne peux pas représenter votre chemin dedans. Pour pouvoir ouvrir ce fichier, je dois utiliser un chemin unicode. Mais C api ne fournit pas une telle fonctionnalité. Mais si votre page de code supporte votre chemin, vous pouvez y convertir votre chemin unicode et l'utiliser avec io.open. Dans les autres cas, vous devez utiliser du code C. Je pense que la manière simple est juste d'utiliser l'extension MS comme _wfopen qui utilise UTF-16 comme arguments. D'une autre manière, utilisez CreateFileW, puis retournez la poignée au descripteur de fichier et ce descripteur au pointeur de fichier.

Vous pouvez également utiliser une bibliothèque d'E/S externe prenant en charge un tel chemin. Je viens de tester ma liaison libuv et de pouvoir lire/écrire des fichiers sur mon système. (chemin de fichier dans utf-8)