HTML解析Android中的特殊字符

问题描述:

我有这个简单的问题:一旦我检索邮件文本,有时会发生Html.fromHtml无法正确解析字符串。HTML解析Android中的特殊字符

我给你举个例子。这是HTML字符串:

&#‪8211‬;&#‪8211‬;&#‪8211‬;&#‪8211‬;& 

它必须是这样的:

------------------------- -

Android有没有办法达到这个目的?我需要使用正则表达式吗?

非常感谢。

您可以过滤掉隐藏人物(在这种情况下):

myString = myString.replaceAll("[\\u202C\\u202A]", ""); 

之后,它只是:

Html.fromHtml(myString); 

它将在HTML环境中工作。或者,如果你想真正的破折号字符:

Html.fromHtml(Html.fromHtml(myString)); 

概念的演示:http://jsfiddle.net/CGzDc/(JavaScript中,你将不得不在这个答案使用代码的Java)

+0

第二部分将不起作用,因为Html.fromHtml不会解析这些特殊的字符,我已经试过了。但是第一部作品,就在2天前我就明白了。这使你的答案是正确的。谢谢 – edoardotognoni

+0

Html.fromHtml(Html.fromHtml(myString));为我工作。但Html.fromHtml只接受String。所以不得不做 Html.fromHtml(Html.fromHtml(myString).toString()); –

您示例中的字符串为–––&(字面上)的HTML表示法,所以正确的浏览器行为就是以这种方式呈现它。由于某些原因,不能从描述中猜出,一些软件已经应用double编码,意思是首先编码em破折号“ - ”作为–,然后再编码&,作为&

顺便说一下,一系列连续的破折号可能会或可能不会产生一条连续的线;这取决于字体。有更可靠的方法来生产长线,如CSS中的<hr>元素和边框属性。

+0

这是正确的。事实上,这是一个大问题。 Html.fromHtml方法正确地解码&amp; in,但破折号代码没有被解码。也许通过首先从主字符串启动Html.fromHtml,它可以转换&amp;,之后我需要别的东西来解码&#8211代码。 – edoardotognoni

+0

@edoardotognoni,因为它*双*编码,你只需要调用'Html.fromHtml' *两次* ...'Html.fromHtml(Html.fromHtml(myString))' – Esailija

+0

顺便说一句,你给的字符串填充[ 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