如何使用 io.open 在 Lua 中打开 Unicode 路径

以下是我的代码:

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 路径?

点赞
用户2328287
用户2328287

一般情况下是不可能的。

例如,我的 Windows 系统默认的字符集是 cp-1251(俄文),所以无法在其中表示您的路径。因此,为了能够打开此文件,我必须使用 Unicode 路径。 但是,C API 并不提供这样的功能。但是,如果您的代码页支持您的路径,则可以将您的 Unicode 路径转换为该代码页,并使用 io.open。 在其他情况下,您必须使用一些 C 代码。我认为简单的方法就是使用 MS 扩展,比如 _wfopen,它使用 UTF-16 作为参数。另一种方法是使用 CreateFileW,然后将句柄包装到文件描述符中,再将该描述符包装到文件指针中。

此外,您还可以使用支持这种路径的外部 IO 库。 我刚刚测试了我的 libuv 绑定,并成功在我的系统上读写文件。 (文件路径为 utf-8)

2017-09-20 12:36:35