如何使用io.open在Lua
问题描述:
这里开一个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路径?
答
一般来说这是不可能的。
例如我的Windows系统有默认的cp-1251(俄罗斯),所以我不能在其中表示你的路径。所以为了能够打开这个文件,我必须使用unicode路径。 但是C api不提供这样的功能。但是,如果你的代码页支持你的路径,那么你可以将你的unicode路径转换为它,并与io.open
一起使用它。 在其他情况下,你必须使用一些C代码。我认为简单的方法是使用MS扩展,如使用UTF-16作为参数的_wfopen
。其他方法是使用CreateFileW
,然后将句柄包装到文件描述符中,并将此描述符包装到文件指针中。
你也可以使用一些支持这种路径的外部IO库。 我只是测试我的libuv绑定,并能够读/写我的系统上的文件。 (utf-8中的文件路径)
Lua标准库函数只接受操作系统本机代码页中的文件名。对于Windows上的Lua,在调用'io.open'之前,您必须手动将文件名从UTF-8转换为您的Windows代码页(可能,您的是CP936)。 –
谢谢!我将文件名从UTF-8转换为GBK,并且工作正常! – KayWang