2017-09-20 150 views
3

这里开一个Unicode路径是我的代码:如何使用io.open在Lua

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

,这是输出:

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

我不想使用WINAPI 我真的很想知道为什么这个功能不支持unicode路径?

+1

Lua标准库函数只接受操作系统本机代码页中的文件名。对于Windows上的Lua,在调用'io.open'之前,您必须手动将文件名从UTF-8转换为您的Windows代码页(可能,您的是CP936)。 –

+0

谢谢!我将文件名从UTF-8转换为GBK,并且工作正常! – KayWang

回答

1

一般来说这是不可能的。

例如我的Windows系统有默认的cp-1251(俄罗斯),所以我不能在其中表示你的路径。所以为了能够打开这个文件,我必须使用unicode路径。 但是C api不提供这样的功能。但是,如果你的代码页支持你的路径,那么你可以将你的unicode路径转换为它,并与io.open一起使用它。 在其他情况下,你必须使用一些C代码。我认为简单的方法是使用MS扩展,如使用UTF-16作为参数的_wfopen。其他方法是使用CreateFileW,然后将句柄包装到文件描述符中,并将此描述符包装到文件指针中。

你也可以使用一些支持这种路径的外部IO库。 我只是测试我的libuv绑定,并能够读/写我的系统上的文件。 (utf-8中的文件路径)