http://wiki.woodpecker.org.cn/moin/MiscItems/2010-11-06

 

昨天用xmerl_scan:string/1 解析xml,发现xmerl_scan:string/1返回的是unicode,如中国的“中”,经过xmerl_scan:string/1处理后,返回的是"[10023]".继续传递的时候到了ejabberd_odbc.erl中,就出错了。因为他没有做处理。

 

解决此问题有两种方法

1.修改 程序代码 对xmerl_scan:string/1返回值进行编码

2.修改ejabberd_odbc.erl对传入的参数进行编码

 

 

jason@client-3:~/work/trunk/src$ svn diff -r 49:298 odbc/ejabberd_odbc.erl 

Index: odbc/ejabberd_odbc.erl

===================================================================

--- odbc/ejabberd_odbc.erl (版本 1)

+++ odbc/ejabberd_odbc.erl (版本 2)

@@ -150,7 +150,11 @@

 

 %% Escape character that will confuse an SQL engine

 escape(S) when is_list(S) ->

-    [odbc_queries:escape(C) || C <- S].

+    %% to handle unicode codepoint to utf-8 string

+    UTF8Binary = unicode:characters_to_binary(S, utf8, utf8),

+    UTF8Str = binary_to_list(UTF8Binary),

+    [odbc_queries:escape(C) || C <- UTF8Str].


好心人更详细的解释

你可能感兴趣的:(sql,C++,c,SVN,C#)