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)
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'. –
merci! Je convertis les noms de fichiers de UTF-8 en GBK, et ça marche! – KayWang