java - 如何 HTML 转义 Java 字符串中的花括号

标签 java unicode html-entities

我有一个包含大引号的字符串。我想用 HTML 实体替换它们,以确保它们不会混淆其他下游系统。对于我的第一次尝试,我只是为要替换的字符添加了匹配,直接在我的代码中输入它们:

public static String escapeXml(String s) {
    StringBuilder sb = new StringBuilder();
    char characters[] = s.toCharArray();
    for ( int i = 0; i < characters.length; i++ ) {
        char c = characters[i];
        switch (c) {
            // other escape characters deleted for clarity
            case '“':
                sb.append("&#8220;");
                break;
            case '”':
                sb.append("&#8221;");
                break;
            case '‘':
                sb.append("&#8216;");
                break;
            case '’':
                sb.append("&#8217;");
                break;
            default:
                sb.append(c);
                break;
        }
    }
    return sb.toString();
}

这在我的 Mac 上编译并运行良好,但是当我们的 CI 服务器(在 Linux 上运行)尝试构建它时,它阻塞了:
Out.java:[347,16] duplicate case label

显然,Linux 机器上的构建链的某些部分无法识别和区分这些花哨的字符。

我的下一个尝试是使用 Unicode 转义。不幸的是,这甚至无法在我的 Mac 上编译:
...
            case '\u8220':
                sb.append("&#8220;");
                break;
            case '/u8221':
                sb.append("&#8221;");
                break;
...

我的编译器抛出了这个提示:
Out.java:[346,21] unclosed character literal

我对如何进行这种替换并让它跨平台可靠地工作感到困惑。有人有任何指示吗?提前致谢。

最佳答案

您可以使用文字字符(即 '‘' ),但您的构建过程需要在编译期间指定正确的源编码。 javac命令选项是 -encoding . (Ant 的javac 任务的属性是相同的。)这应该与您的IDE 在保存文件时使用的任何编码相匹配。

例如,如果您的 IDE 使用 UTF-8,但构建机器使用其平台默认编码 US-ASCII,则特殊字符将被解码为 ? .由于现在多个案例具有相同的标签,因此您会收到原始错误消息。

关于java - 如何 HTML 转义 Java 字符串中的花括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1731917/

相关文章:

python - 读取以python中不同编码选项保存的文件后的输出差异

Python Unicode 编码错误

java - Openshift JBoss 字符编码

java - 集合上的 QueryDSL -> 字符串列表的任何()

java - 绘制跨多个 View 或面板或水平滚动的 Java 2D 图表

php - <a href= 中的 HTML 实体

html - 为什么不间断空格 ( ) 转换为破折号 (-)?

java - 在 Java 中使用 XML : fluent XSD and no need to parse

转换为 unicode 的 java 错误

html - & 或 & 如果我们在 XHTML 文档中使用 UTF-8,&(符号)应该使用什么?