2010-12-29 6 views
4

私はluaテーブルからデータベースを選択した後にxmlファイルを生成するためにluaxml libを使用しています。すべてが良いですが、私は私のDB(NySQL)でロシアの記号を使用しています。私がluaxmlで行う必要があるのは、コードではなく(a-la Ð)、このシンボルを実際のシンボルで表したものです。 私はメソッド関数xml.registerCode(デコード、エンコードされた)を見つけたが:(Lua、XML、UTF-8

何も理解していないか、多分、私は別のlibを使用する必要はありませんし、もしそうなら - あなたは意味

+1

詳細を記入してください。少なくとも呼び出す関数、パラメーター、期待される結果、取得した結果。 – kikito

+0

「本当のシンボル」はどういう意味ですか? –

+0

あなたのDBではどのようなエンコーディングが使用されており、どのようなエンコーディングをXMLヘッダーに入れていますか? 文字列をXMLに書き込む前に変更しますか? –

答えて

0

何libに。?ロシアの手紙?

あなたはXMLファイルでUTF-8を持っていますか? は、多分あなたは(あなたが唯一のロシア語のテキストを表示する場合

?Windowsの-1251を試すか、あなたのようないくつかのことを見た場合、MySQLのテーブルのエンコードをチェックすることができますa-laÐ) - テーブル自体のエンコーディングを変更する必要があります。

私はMySQLのグルジア文字で同じ問題を抱えていましたが、MySQLのテーブルに挿入した後、14124#121#smthに変更されました。テーブルのエンコーディングを変更して修正されました。

0

私はlibを調べました。すべて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>