Я посмотрел кодировку в Википедии и нашел следующее решение для преобразования из UTF-8 в TIS-620.Предполагается, что все кодовые точки в строке UTF-8 имеют кодировку в TIS-620.Это будет работать, если строка UTF-8 содержит только печатные символы ASCII (кодовые точки " "
до "~"
) или тайские символы (кодовые точки "ก"
до "๛"
).В противном случае это даст неправильные и, возможно, очень странные результаты.
Это предполагает, что у вас есть библиотека Lua 5.3 utf8
или эквивалентная.Если вы используете более раннюю версию Lua, одна из возможностей - это pure-Lua версия библиотеки ustring
от MediaWiki (используемой, например, Wikipedia и Wiktionary).Он предоставляет функцию для проверки UTF-8, и многие другие функции будут проверять строки автоматически.(То есть они выдают ошибку, если строка недопустима в формате UTF-8.) Если вы используете эту библиотеку, вам просто нужно заменить utf8.codepoint
на ustring.codepoint
в приведенном ниже коде.
-- Add this number to TIS-620 values above 0x80 to get the Unicode codepoint.
-- 0xE00 is the first codepoint of Thai block, 0xA0 is the corresponding byte used in TIS-620.
local difference = 0xE00 - 0xA0
function UTF8_to_TIS620(UTF8_string)
local TIS620_string = UTF8_string:gsub(
'[\194-\244][\128-\191]+',
function (non_ASCII)
return string.char(utf8.codepoint(non_ASCII) - difference)
end)
return TIS620_string
end