Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua、XML、UTF-8_Xml_Lua_Luaxml - Fatal编程技术网

Lua、XML、UTF-8

Lua、XML、UTF-8,xml,lua,luaxml,Xml,Lua,Luaxml,我使用luaxmllib在数据库从lua表中选择后生成xml文件。一切都很好,但我在DB(NySQL)中使用了俄语符号。我需要用luaxml做的不是用代码(a-laÐ)而是用真实的符号来表示这些符号。 我找到了方法函数xml.registerCode(解码、编码),但什么都不懂:( 或者,也许,我需要使用另一个库。如果是的话-什么库?我已经查看了库的内部-它对所有>127字节进行强制编码,从而将UTF分解为单独的字符。它在使用其内置的.registerCode机制后执行此操作,因此您甚至无法覆盖

我使用luaxmllib在数据库从lua表中选择后生成xml文件。一切都很好,但我在DB(NySQL)中使用了俄语符号。我需要用luaxml做的不是用代码(a-laÐ)而是用真实的符号来表示这些符号。 我找到了方法函数xml.registerCode(解码、编码),但什么都不懂:(


或者,也许,我需要使用另一个库。如果是的话-什么库?

我已经查看了库的内部-它对所有>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>
localdoc=xml.new(“外部”)
doc.version=“2.0”
本地内部=xml.new(“内部”)
internal.id=“АБГБББББББББББББББСгЙЙМПППСПСПППСПФЧЩЪЮЯ”
表.插入(文件,内部)
localencoded=xml.str(doc):gsub('&#%d+'),high_ascii_unroll)
-- 
--  
-- 

查看LuaXML_lib.c内部,有一个名为char2code()的方法,它用数字实体替换不在ASCII范围内的字符。您可以通过以下方法来“解除”它:

static const char* char2code(unsigned char ch, char buf[2]) {
    buf[0]=ch;
    buf[1]=0;
    return buf;
}

这将阻止它用实体替换任何无效字符。然后由您确定输入中没有无效字符,但肯定不会再损坏您的UTF-8。

请提供更多详细信息。至少包括您正在调用的函数、它们的参数、预期结果和您获得的结果你所说的“真实符号”是什么意思?你的数据库使用的是什么编码,你在xml头中放的是什么编码?你在将字符串写入xml之前修改过字符串吗?