dポイントプレゼントキャンペーン実施中!

libxml2で

<?xml version="1.0" encoding="shift_jis"?>
<project>
  <path>C:\</path>
<project>

というXMLファイルをパースしたところ、
project/pathのcontentが文字化けしてしまいます。

バイトコードとしては
0x43
0x3a
0xc2
0xa5
という感じで円記号が悪さをしているようです。

なぜ文字化けするのか、
また回避する手段を教えてください。

A 回答 (1件)

ShiftJISにおいて、半角の円マークをバックスラッシュの意味と円マークの意味の両方で使っているためです。



円マークは、Unicodeでは U+005CではなくU+00A5にマッピングされているので
それがUTF-8表現で 0xC2 xA5 のようになっているのですが、
もはやこれはパスの区切り文字とは何の関係もないものなので
(バックスラッシュは U+005Cなので 0x5Cとなる)、
その文字を含む文字列をパスを表すものとして解釈するプログラムが文句を言っているわけです。

libxml2 で受け付けるのかわかりませんが、encoding に Windows31-J とかはつかえませんか?
あとはどうにかして円マークを使わないような表現にするとか(可能ならば)。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!