【问题标题】:C libxml encoding issue.C libxml 编码问题。
【发布时间】:2015-11-27 19:47:57
【问题描述】:

我在使用 libxml2 两天后就遇到了一个问题,这让我很烦恼。

基本上,我使用套接字通过网络发送一个 xml 缓冲区。当我在服务器上收到它并尝试解析它时,它说:

解析器错误:输入不是正确的 UTF-8,表示编码! 字节数:0xFF 0xFF 0xFF 0xFF

我试图发送的 xml 树 (biometricData) 的一个标签包含奇怪的奇怪字符,因为这是加密数据的原始缓冲区。

<biometricData>������������������������

</biometricHeader><biometricData>
                               ^

客户端:

xmlDocDumpMemoryEnc(doc, &(*out), &buffersize, "UTF-8");

服务器端:

int verify(unsigned char *data, int len) //The routine to check the data and authenticate user.

 xmlParserCtxtPtr ctx_ptr = xmlNewParserCtxt();
 doc = xmlCtxtReadMemory(ctx_ptr, (const char*)data, len, "data.xml", "UTF-8", 0);

服务器抛出此错误:

Entity: line 2: parser error : Input is not proper UTF-8, indicate encoding !
Bytes: 0xFF 0xFF 0xFF 0xFF
d>2.23.42.9.10.4.2</oid></formatOwner></format></biometricHeader><biometricData>
                                                                               ^

我尝试将服务器端的编码更改为 ISO-8859-1,它可以工作!但是,当我尝试执行 nodeGetContent(biometricData) 时,数据不会采用原始​​编码,因此缓冲区完全没用。

感谢您抽出宝贵时间。 我已经搜索了 xmlCharEncodingHandler 但我没有成功......

【问题讨论】:

  • “加密数据的原始缓冲区”是指未编码的二进制数据?如果是这样用 Base64 编码它
  • 是的,这似乎是原始二进制数据......
  • @robin.koch 我已经尝试了你的建议。好吧,我无语了,你是我的英雄!!!!非常感谢。我想如果没有你的帮助,我仍然会寻找答案。

标签: c linux utf-8 libxml2 biometrics


【解决方案1】:

使用 base64 对所有二进制数据进行编码。 XML 解析器通常可以/不会处理二进制数据。

我不知道你处理了多少二进制数据,所以如果 base64 编码/解码效率低下,请查看http://www.xml.com/pub/a/98/07/binary/binary.html

【讨论】:

  • Base64 足以满足我现在的尝试。再次感谢您!
  • 更多,0xff 不是有效的 utf-8 字节。这就是图书馆抱怨的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多