LUA:如何正确读取带有重音字母和变音符号的 UFT8 文件名和路径?
Posted
技术标签:
【中文标题】LUA:如何正确读取带有重音字母和变音符号的 UFT8 文件名和路径?【英文标题】:LUA: how to correctly read UFT8 file names and path with accented letters and umlaut? 【发布时间】:2022-01-07 05:39:38 【问题描述】:在 LUA 中一个更复杂的脚本中,我创建了以下函数,应该是 检索位于目录中的所有音频文件的列表,该目录在调用函数时指定(第一个参数)。
该函数根据第二个参数的值返回格式化的 html 行或 CSV 行。
如果为 1,则返回 HTML 如果为 2,则返回 CSV
除非路径和/或文件名没有重音字母或变音符号,否则此功能可以正常工作。 然后失败。
这是一个夸张的例子,我已经用它做了测试:
J:\PRODUCTION\tüv-ààéérï-utf8\Rendering\tüv-ààéérï-utf8_.wav
我确实尝试过像这里介绍的那样实施解决方案:
converting UTF-8 string to ASCII in pure LUA
这里:
Handle special characters in lua file path (umlauts)
但没有成功。
有没有办法在 LUA 中获取带有重音/变音符号的文件名和路径?
重要提示: LUA 解释器不是独立的。它是内置的音频应用程序 Reaper。 因此,我无法单独安装某些特定的 LUA 扩展。 所以,我需要编写一些代码,但我完全迷路了。 [编辑] 操作系统 Windows,但我也应该在 Mac 和 Linux 上工作
----------------------------------------------
-- SCAN RENDERED AUDIO
----------------------------------------------
function scandir(directory,format)
local i, t, popen = 0, , io.popen
t = ''
local f=io.popen('dir '..directory)
for filename in popen('dir "'..directory..'" /b'):lines() do
local extension = filename:match("^.+(%..+)$")
if extension == ".wav" or
extension == ".mp3" or
extension == ".flac" or
extension == ".mov" or
extension == ".ogg" or
extension == ".mp4" then
uriFormat = filename:gsub(" ", "%%20")
if format == 1 then
t = t..'<tr class="Rendered"><td>'..directory..'</td><td>'..tostring(filename)..'</td><td><audio controls src="'..directory..'/'..tostring(uriFormat)..'"/></td></tr>'
elseif format == 2 then
t = t..directory..','..tostring(filename)..','..directory..tostring(filename)..LF
end
i = i + 1
end
end
return t
end
【问题讨论】:
【参考方案1】:第一个问题是将dir
命令的输出转换为UTF8 字符串。
在磁盘的某处创建文件cp.bat
:
@chcp %1 >nul
替换popen('dir "'..
与popen('C:\\path\\to\\cp.bat 65001 <nul & dir "'..
第二个问题是将输入参数 directory
(作为参数传递给函数 scandir
的 UTF-8 字符串)转换为正确的编码。io.popen
期望其参数在 1252 代码页中。
所以,使用来自this script的函数utf8_to_win
。
不要忘记在第 11 行设置您的代码页 (1252)
【讨论】:
请问用什么来创建空的 cp.bat?并且:您链接到我的功能是否正确转换变音符号?关于第 11 行:最终的 html 页面是 UTF8 格式的,所以我也需要重新转换为 UTF8 格式。empty cp.bat
此文件不能为空。它包含 1 行代码。您可以创建一个 .txt 文件并将其重命名为 .bat。 is properly converting the umlaut?
是的
i should work also on Mac and Linux
- 你应该有单独的 Lua 代码分支用于 windows(有转换)和 linux(没有)。 Lua 可以通过os.getenv"OS"
查看操作系统
好的,我现在正在连接您建议的代码。只是不要提交错误: 1. .bat 中的代码行是否为:@chcp %1 >nul?我想是的。你能确认或更正我吗? 2. "popen('dir "'.." 出现了 2 次。我想我必须对两者都进行更改。对吗?
Dir 传递给函数:J:\PRODUCTION\tüv-ààéérï-utf8/Rendering Dir after conversion utf8_to_win(): J:\PRODUCTION\tüv-??éér?-utf8/Rendering I need使用 win_to_utf8() 在 UTF8 上重新转换,但我得到:J:\TUTORIALS\tüv-??éér?-utf8/Rendering lost the characters以上是关于LUA:如何正确读取带有重音字母和变音符号的 UFT8 文件名和路径?的主要内容,如果未能解决你的问题,请参考以下文章