Raptor RDF ライブラリを使用して rdf-xml ファイル (UTF-8 エンコード) を解析するプログラム (c++、Windows) を作成しています。パーサーが特殊文字 ('µ' '°' '²' など) を含むリテラル値を検出した場合を除いて、すべて正常に行われます。このような場合、パーサーは解釈されていない文字列を返します。たとえば、パーサーがリテラル値を見つけた場合:
ブラブラ
以下を含む文字タブを返します。
「ブラ\u00B5ブラ」
(引用符はエラーではありません。返される文字列は' " ' で囲まれます)。
この文字列は解釈されないと言います。コードに直接記述した場合、期待される結果が得られるためです。
std::string test("bla\u00B5bla"); printf(test.c_str());
出力:
ブラブラ
Raptor パーサーによって返された文字列を再現したい場合は、次のようにする必要があります。
std::string test("\"bla\\u00B5bla\""); printf(test.c_str());
出力:
「ブラ\u00B5ブラ」
だから、私の質問は次のとおりです。文字列内の特殊文字を再解釈する方法は? 私はいくつかの調査を行いましたが、これに答えるものは何も見つかりませんでした。どんな助けでも非常に役に立ち、感謝します。
EDIT1:ここでは、「解釈されていない」文字列を取得する方法を示すいくつかの簡略化されたコード:
void triple_handler(void* user_data, raptor_statement* triple) {
if (triple->object->type == RAPTOR_TERM_TYPE_LITERAL){
printf((char*) raptor_term_to_string(triple->object));
}
}
出力 (ファイル内の元のリテラル値が : blaµbla であると仮定) :
「ブラ\u00B5ブラ」
私の目標は、そこから元の正しい文字列を回復することだけです。