这是我的代码:
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路径?
答案 0 :(得分:1)
一般来说,这是不可能的。
E.g。我的Windows系统有默认的cp-1251(俄语)所以我不能代表你的路径。所以为了能够打开这个文件,我必须使用unicode路径。
但是C api没有提供这样的功能。但是,如果您的代码页支持您的路径,那么您可以将您的unicode路径转换为它,并将其与io.open
一起使用。
在其他情况下,您必须使用一些C代码。我认为简单的方法就是使用像_wfopen
这样的MS扩展,它使用UTF-16作为参数。其他方法是使用CreateFileW
然后将句柄包装到文件描述符,将此描述符包装到文件指针。
此外,您可以使用一些支持此类路径的外部IO库。 我只是测试我的libuv绑定,并能够在我的系统上读/写文件。 (utf-8中的文件路径)