这是我的代码:
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 扩展,如 _wfopen
它使用 UTF-16 作为参数。其他方式是使用 CreateFileW
然后将句柄包装到文件描述符,并将此描述符包装到文件指针。
您也可以使用一些支持此类路径的外部 IO 库。
我只是测试我的 libuv 绑定(bind)并能够在我的系统上读/写文件。
(utf-8 中的文件路径)
关于unicode - 我如何使用 io.open 在 lua 中打开 unicode 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46320143/