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

encoding モジュールで定義された関数の 1 つを使用して、入力文字列を 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 に答える