我有這個簡單的問題:一旦我檢索郵件文本,有時會發生Html.fromHtml
無法正確解析字符串。HTML解析Android中的特殊字符
我給你舉個例子。這是HTML字符串:
––––&
它必須是這樣的:
------------------------- -
Android有沒有辦法達到這個目的?我需要使用正則表達式嗎?
非常感謝。
我有這個簡單的問題:一旦我檢索郵件文本,有時會發生Html.fromHtml
無法正確解析字符串。HTML解析Android中的特殊字符
我給你舉個例子。這是HTML字符串:
––––&
它必須是這樣的:
------------------------- -
Android有沒有辦法達到這個目的?我需要使用正則表達式嗎?
非常感謝。
您可以過濾掉隱藏人物(在這種情況下):
myString = myString.replaceAll("[\\u202C\\u202A]", "");
之後,它只是:
Html.fromHtml(myString);
它將在HTML環境中工作。或者,如果你想真正的破折號字符:
Html.fromHtml(Html.fromHtml(myString));
概念的演示:http://jsfiddle.net/CGzDc/(JavaScript中,你將不得不在這個答案使用代碼的Java)
您示例中的字符串爲–––&
(字面上)的HTML表示法,所以正確的瀏覽器行爲就是以這種方式呈現它。由於某些原因,不能從描述中猜出,一些軟件已經應用double編碼,意思是首先編碼em破折號「 - 」作爲–
,然後再編碼&
,作爲&
。
順便說一下,一系列連續的破折號可能會或可能不會產生一條連續的線;這取決於字體。有更可靠的方法來生產長線,如CSS中的<hr>
元素和邊框屬性。
這是正確的。事實上,這是一個大問題。 Html.fromHtml方法正確地解碼&amp; in,但破折號代碼沒有被解碼。也許通過首先從主字符串啓動Html.fromHtml,它可以轉換&amp;,之後我需要別的東西來解碼&#8211代碼。 – edoardotognoni
@edoardotognoni,因爲它*雙*編碼,你只需要調用'Html.fromHtml' *兩次* ...'Html.fromHtml(Html.fromHtml(myString))' – Esailija
順便說一句,你給的字符串填充[ U + 202C](http://www.fileformat.info/info/unicode/char/202c/index.htm)和[U + 202A](http://www.fileformat.info/info/unicode/char/ 202a/index.htm)在每個'#'之後..你應該過濾掉那些和雙解碼將工作 – Esailija
第二部分將不起作用,因爲Html.fromHtml不會解析這些特殊的字符,我已經試過了。但是第一部作品,就在2天前我就明白了。這使你的答案是正確的。謝謝 – edoardotognoni
Html.fromHtml(Html.fromHtml(myString));爲我工作。但Html.fromHtml只接受String。所以不得不做 Html.fromHtml(Html.fromHtml(myString).toString()); –