Android在進(jìn)行XML解析時(shí)特殊字符&顯示問題

問題重現(xiàn)

昨天一早到公司,測(cè)試就給我說了一個(gè)Bug艘策,關(guān)于一個(gè)消息通知顯示的問題,正常的消息應(yīng)該顯示為:

恭喜XXX在XXX房間抽中XXX

一直也是正常顯示的。那天突然就出現(xiàn)了一個(gè)異常顯示:

恭喜 ? ? ? ? ? ? ??

問題原因? ? ?

通知后面的消息全都沒有了堤框。然而我自己在測(cè)試的N次中一直都沒有復(fù)現(xiàn),直到一個(gè)偶然的機(jī)會(huì)纵柿,突然看到我的應(yīng)用中飄過一條消息:“恭喜??????????????? ”蜈抓,大驚,趕快看日志昂儒,發(fā)現(xiàn)這是一個(gè)名為“&¥#@沟使,。渊跋,腊嗡。”一堆亂七八糟的符號(hào)問昵稱的用戶發(fā)的消息拾酝,我趕快找測(cè)試問這是誰發(fā)的燕少,讓再來幾發(fā)。中間又經(jīng)過一堆排除蒿囤,最終發(fā)現(xiàn)異常是由于“&”符號(hào)引起的客们。

通知在顯示時(shí)是通過拼接的一個(gè)HTML的<span>標(biāo)簽,然后進(jìn)行解析顯示的,XXX都有自己的樣式底挫,如顏色這些恒傻。我開始就懷疑是HTML標(biāo)簽中出現(xiàn)“ & ”符號(hào),引起的異常建邓,在查了一些資料和又把前人的代碼查看了一番后盈厘,發(fā)現(xiàn)這個(gè)HTML文本,最終是以XML格式進(jìn)行解析涝缝,然后拆分為不同字符串進(jìn)行展示的扑庞,最終定位到了問題,由于XmlPullParser在解析時(shí)不能出現(xiàn)&符號(hào)拒逮,因?yàn)?amp;符號(hào)是節(jié)點(diǎn)字符罐氨,所以不能直接使用,需要進(jìn)行處理滩援。

解決方法

在定位到問題后栅隐,就好辦了。在此記錄一下解決方式玩徊,以備后用租悄。

&lt;? ? ????? <??????? 小于號(hào)

&gt;? ?????? > ? ? ?? 大于號(hào)

&amp;???? & ? ? ?? 和號(hào)

&apos;???? ' ? ? ? ? 單引號(hào)

&quot;???? "???????? 雙引號(hào)

注釋:嚴(yán)格的說,在XML中只有字符“&”和字符“<”是非法的恩袱。注意最后的" ; "不能少泣棋。

"<" 會(huì)產(chǎn)生錯(cuò)誤,因?yàn)榻馕銎鲿?huì)把該字符解釋為新元素的開始畔塔。

"&" 也會(huì)產(chǎn)生錯(cuò)誤潭辈,因?yàn)榻馕銎鲿?huì)把該字符解釋為字符實(shí)體的開始。

非法的 XML 字符必須被替換為實(shí)體引用(entity reference)澈吨。

假如在 XML 文檔中放置了一個(gè)類似 "<" 或 "&" 字符把敢,那么這個(gè)會(huì)產(chǎn)生一個(gè)錯(cuò)誤:

XmlPullParserException: unterminated entity ref

<message>if salary < 1000 & then</message>

為了避免此類錯(cuò)誤,需要把字符 "<" 替換為實(shí)體引用谅辣,就像這樣:

<message>if salary &lt; 1000 &amp;? then</message>

在解析中當(dāng)有一大片的內(nèi)容不需要解析時(shí)修赞,可以考慮CDATA。術(shù)語 CDATA 指的是不應(yīng)由 XML 解析器進(jìn)行解析的文本數(shù)據(jù)(Unparsed Character Data)桑阶。

CDATA 部分由 "<![CDATA[" 開始柏副,由 "]]>" 結(jié)束具體可以去查找一下資料蚣录。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末割择,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子包归,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件公壤,死亡現(xiàn)場(chǎng)離奇詭異换可,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)厦幅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門沾鳄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人确憨,你說我怎么就攤上這事译荞。” “怎么了休弃?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵吞歼,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我塔猾,道長(zhǎng)篙骡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任丈甸,我火速辦了婚禮糯俗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘睦擂。我一直安慰自己得湘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布顿仇。 她就那樣靜靜地躺著淘正,像睡著了一般。 火紅的嫁衣襯著肌膚如雪夺欲。 梳的紋絲不亂的頭發(fā)上跪帝,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音些阅,去河邊找鬼伞剑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛市埋,可吹牛的內(nèi)容都是我干的黎泣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼缤谎,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼抒倚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起坷澡,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤托呕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體项郊,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡馅扣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了着降。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片差油。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖任洞,靈堂內(nèi)的尸體忽然破棺而出蓄喇,到底是詐尸還是另有隱情,我是刑警寧澤交掏,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布妆偏,位于F島的核電站,受9級(jí)特大地震影響耀销,放射性物質(zhì)發(fā)生泄漏楼眷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一熊尉、第九天 我趴在偏房一處隱蔽的房頂上張望罐柳。 院中可真熱鬧,春花似錦狰住、人聲如沸张吉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肮蛹。三九已至,卻和暖如春创南,著一層夾襖步出監(jiān)牢的瞬間伦忠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工稿辙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昆码,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓邻储,卻偏偏與公主長(zhǎng)得像赋咽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吨娜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1. XML簡(jiǎn)介 以下內(nèi)容來自于http://www.w3school.com.cn/xml 基本知識(shí) XML 和...
    WebSSO閱讀 1,924評(píng)論 1 7
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法脓匿,類相關(guān)的語法,內(nèi)部類的語法宦赠,繼承相關(guān)的語法陪毡,異常的語法米母,線程的語...
    子非魚_t_閱讀 31,662評(píng)論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,814評(píng)論 0 11
  • 張文娣閱讀 296評(píng)論 0 0
  • 1. 人為什么會(huì)嫉妒? 因?yàn)橛邢胍臇|西毡琉。 人為什么會(huì)憎恨爱咬? 因?yàn)橄胍臇|西求而不得。 我強(qiáng)烈的嫉妒并憎恨著叢優(yōu)優(yōu)...
    小四不四閱讀 246評(píng)論 4 1