1

我使用 libxml 和 c++ 创建了一个 xml 文件。我现在想做的是从 .txt 中读取并将此文本放在一些特定标签之间。

我尝试了以下代码,只是从文件中读取并在标签之间写入:

char * s ;
double d;

fichier>>i>>s>>d;

// fichier.close();                                                                                                                

cout << s << endl ;

 xmlNewChild(root_node, NULL, BAD_CAST "metadata",
             BAD_CAST   s );

运行此代码时,我收到此错误:

output error : string is not in UTF-8 

所以我猜测输入和输出之间存在格式不兼容。你能帮我吗?我不知道如何解决这个问题。

4

1 回答 1

0

您需要使用编码模块中定义的函数之一将输入字符串转换为 UTF-8 输入。(或使用您喜欢的任何其他编码库,如 icu)您可以在此处找到有关编码模块的详细信息http://www.xmlsoft.org/html/libxml-encoding.html

我的猜测是您想保留字节,以便您需要的是类似的东西(非常未经测试,纯粹来自文档。)

//Get the encoding
xmlCharEncodingHandlerPtr encoder = xmlGetCharEncodingHandler(XML_CHAR_ENCODING_ASCII);

// Each ascii byte should take up at most 2 utf-8 bytes IIRC so allocate enough space.
char* buffer_utf8 = new char[length_of_s*2];

//Do the encoding
int consumed = length_of_s;
int encoded_length=length_of_s*2;

int len = (*encoder.input)(buffer_utf8, &encoded,s,&consumed);
if( len<0 ) { .. error .. }
buffer_utf8[len]=0; // I'm not sure if this is automatically appended or not.

//Now you can use buffer_utf8 rather than s.

如果您的输入采用 libxml 支持的不同编码,则只需更改XML_CHAR_ENCODING_ASCII为正确的常量即可,尽管您可能还需要更改 in 中分配的字节数buffer_utf8

于 2013-04-03T05:19:25.400 回答