Я заглянул внутрь библиотеки - она выполняет принудительное кодирование для всех> 127 байт, тем самым разбивая UTF на отдельные символы.Он делает это после использования встроенного механизма .registerCode
, поэтому вы даже не можете его переопределить.
Если вам нужно закодировать некоторую сложную структуру данных, вы можете просто развернуть все эти замены сущностей после XmlLua
закончил строковое преобразование, объявив где-то:
local high_ascii_unroll = {}
for code = 128, 255 do
high_ascii_unroll['&#' .. code .. ';'] = string.char(code)
end
и затем используя gsub
в итоговой строке:
local doc = xml.new("outer")
doc.version = "2.0"
local inner = xml.new("inner")
inner.id = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫьЭЮЯ"
table.insert(doc, inner)
local encoded = xml.str(doc):gsub('&#%d+;', high_ascii_unroll)
-- <outer version="2.0">
-- <inner id="АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫьЭЮЯ" />
-- </outer>