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

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

最佳答案

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

例如。我的 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/

相关文章:

visual-c++ - 为什么某些 Unicode 字符会导致 std::wcout 在控制台应用程序中失败?

c++ - 路亚 "attempt to index a nil value"

c - 使用 C + SWIG + 函数指针伪造面向对象?

java - Java 在文件中间写入的最佳方式

c++ - 为什么有不同的输入值?

c++ - 在 Qt 5.3 中翻译 Unicode 文字

python - Reportlab - Unicode 字符以支持 unicode 的字体显示为框

JavaScript:HTML 实体转换器(实体到 UNICODE 和 CSS 转义)

c# - 使用 C# 的 lua 脚本中的西里尔字符串值

java - Java 中的 PrintWriter 给出意外行为