1. ホーム
  2. xml

[解決済み] デコード � リアルキャラクターへ

2022-02-15 02:33:04

質問

TwitterのStream APIからデータを読み込んで、xmlファイルに書き込む場合。

しかし � はエラーを引き起こします(つまり、Chromeでそのxmlファイルを開くと、Chromeはその文字でエラーが発生したと表示しました!)

このエンコードされたシーケンス( � ) を実際の文字 (�) に変換してから xmlfile に書き込んでください!

どのように実装するのですか?

-------------ADDED--------------

これがXMLFileの内容です。

<?xml version="1.0" encoding="UTF-8"?>
<root>
<text>@carlyraejepsen would be a dream if you follow me, please follow me?, I love you so much you're my inspiration</text>
<text>someone please bring me a caramel apple and a mocha from black cat. i'll love you forever</text>
<text>“@G_MartinFlyKick: Marry me Juliet.I love you and that's all I really know.”&#55357;&#56834;&#55357;&#56834;&#55357;&#56834;&#55357;&#56834;&#55357;&#56834;</text>
<text>"I need to see a picture of him cuz Im trying to imagine you guys making love and all I see is u climbing on top of a big question mark"lmao</text>
<text>@District3music hi, I LOVE YOU follow me please? &amp;lt;3 xx 23</text>
<text>RT @syardley_: So appreciative of my family and people I love, wouldn't be where I am without them. #thankful</text>
<text>#DISTRICT3HALLOWEENFOLLOWSPREE #DISTRICT3HALLOWEENFOLLOWSPREE #3EEKERFROMTHENETHERLANDS love you! Please follow ? @District3music x42</text>
<text>Arguably my favorite electronic music producer @Kluteuk is coming back to Toronto on Dec 22nd. So stoked. Guy has made so many tunes I LOVE.</text>
<text>The stakes are high, the water's rough, but this love is ours.</text>
<text>@NiallOfficial Answer me, I love you very much. Venezuela loves. jhgj</text>
<text>Love this shit http://t.co/qSP79NKx</text>
</root>

そして、以下はChromeのエラーです。

This page contains the following errors:

error on line 5 at column 91: xmlParseCharRef: invalid xmlChar value 55357
Below is a rendering of the page up to the first error.

解決方法は?

文字参照 &#55357; はサロゲートコードポイント(U+D83D)を示しているので、これを文字に変換しようとするのは間違っています。これは文字ではありませんし、半文字ですらありません。

リファレンスが生成された時点まで遡る必要があります。原因は、文字コードの混乱かもしれません。UTF-16では、サロゲートコードユニットが現れることがありますが、データを文字として解釈し、別のエンコーディングに変換したり、文字参照にしたりする場合には、ペアで処理する必要があります。