我如何使用io.open在lua中打开unicode路径

时间:2017-09-20 10:54:14

标签: unicode lua io

这是我的代码:

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 个答案:

答案 0 :(得分:1)

一般来说,这是不可能的。

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

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