如何在Lua中将Windows-1256转换为UTF-8?

我需要将 Windows-1256 编码的阿拉伯文本转换成 UTF-8,有什么方法可以做到吗?谢谢。

点赞
用户107090
用户107090

尝试使用 lua-iconv,它将 iconv 绑定到 Lua 中。

2013-05-18 12:57:31
用户1847592
用户1847592
local win2utf_list = [[
0x00    0x0000  #NULL
0x01    0x0001  #START OF HEADING
0x02    0x0002  #START OF TEXT
-- 从http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1256.TXT下载完整的文本
0xFD    0x200E  #从左到右标记
0xFE    0x200F  #从右到左标记
0xFF    0x06D2  #阿拉伯文字母 YEH BARREE
]]

local win2utf = {}

-- 将 win2utf_list 中的字符转为 utf8 编码
for w, u in win2utf_list:gmatch'0x(%x%x)%s+0x(%x+)' do
   local c, t, h = tonumber(u,16), {}, 128
   while c >= h do
      t[#t+1] = 128 + c%64
      c = math.floor(c/64)
      h = h > 32 and 32 or h/2
   end
   t[#t+1] = 256 - 2*h + c
   win2utf[w.char(tonumber(w,16))] =
      w.char((table.unpack or unpack)(t)):reverse()
end

-- 将 win_string 转为 utf8 编码
local function convert_to_utf8(win_string)
   return win_string:gsub('.', win2utf)
end
2013-05-18 18:47:23
用户8301479
用户8301479

通常需要使用映射表,将一种代码页(字符集)转换为另一种。

例如:http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1256.TXT,将 CP1256 转换为 Unicode。

然后从 Unicode 转换为 Utf8(使用编码/解码方法在 Unicode 和 UTF-8 之间工作,无需一个大的映射表)。

注:保留原本的 markdown 格式。

2020-11-17 17:22:58