【问题标题】:HTML parse special chars in AndroidHTML解析Android中的特殊字符
【发布时间】:2012-11-25 12:57:11
【问题描述】:

我有一个简单的问题:一旦我检索到邮件文本,有时Html.fromHtml 无法正确解析字符串。

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

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

它必须是这样的:

––––––––––––––––––––––––––––––––––––

Android 中有没有办法实现这一点?我需要使用正则表达式吗?

非常感谢。

【问题讨论】:

    标签: android html unicode


    【解决方案1】:

    您可以过滤掉隐藏的字符(在这种情况下):

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

    之后就是:

    Html.fromHtml(myString);
    

    它可以在 html 上下文中工作。或者,如果您想要真正的破折号字符:

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

    概念演示:http://jsfiddle.net/CGzDc/(javascript,您将不得不在这个答案中使用代码用于 java)

    【讨论】:

    • 第二部分不起作用,因为 Html.fromHtml 不会解析这些特殊字符,我已经尝试过了。但是第一个作品,我在两天前才发现它。那就是让你的答案正确。谢谢
    • Html.fromHtml(Html.fromHtml(myString));为我工作。但是 Html.fromHtml 只接受字符串。所以不得不做 Html.fromHtml(Html.fromHtml(myString).toString());
    【解决方案2】:

    您示例中的字符串是–––&(字面意思)的HTML 符号,因此正确的浏览器行为是以这种方式呈现它。由于某些无法从描述中猜到的原因,某些软件已应用 double 编码,即首先将 em 破折号“-”编码为 –,然后再次将 & 编码为&.

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

    【讨论】:

    • 没错。事实上,这是一个大问题。 Html.fromHtml 方法正确地解码了 & 中的 &amp,但它没有解码破折号代码。也许通过首先从主字符串启动 Html.fromHtml 它可以转换 &amp,然后我需要其他东西来解码 – 代码。
    • @edoardotognoni 因为它是 double 编码的,你只需要调用Html.fromHtml 两次...Html.fromHtml(Html.fromHtml(myString))
    • 顺便说一句,你给的字符串在每个#之后都填充了U+202CU+202A..你应该过滤掉它们,双重解码就可以了
    • 是的,我在 2 分钟前还在考虑这个问题。你会如何过滤它?
    猜你喜欢
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多