(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【XML/文字コード】見た目は一緒にもかかわらずdiffで差異が出る事象の原因

スポンサーリンク

事象

以下のように文字列として同じにもかかわらず

cat 1.xml
<div class="ac-container">
cat 2.xml
<div class="ac-container">

diffの結果に差分が出る。

$ diff 1.xml 2.xml
1c1
< <div class="ac-container">
---
> <div class="ac-container">
環境情報
$ bash --version
GNU bash, バージョン 4.4.12(3)-release (x86_64-unknown-cygwin)

原因/解決策

XMLの空白文字のコードが異なる。

具体的には片方は以下を利用して解読されたテキストで

&#x20;

片方は以下を利用していた解読されたテキスト

&#xA0;

であった。

以下、補足です。

補足

CURL等でXMLでテキストを送付する際には一部の記号をエスケープする必要がありますが

空白文字を以下のUTF-8用で送ると

&#xA0;

タグとして認識されない場合があります。

視覚的に同じように見える冒頭の2ファイルもbase64で記号化すると空白部分で差異が出るので原因が特定できました。

$ cat 1.xml | base64
PGRpdsKgY2xhc3M9ImFjLWNvbnRhaW5lciI+Cg==
$ cat 2.xml | base64
PGRpdiBjbGFzcz0iYWMtY29udGFpbmVyIj4K

以上、同様の事象でお困りな方の参考になれば幸いです。