【发布时间】:2010-12-16 10:59:45
【问题描述】:
我有一个包含大引号的字符串。我想用 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("“");
break;
case '”':
sb.append("”");
break;
case '‘':
sb.append("‘");
break;
case '’':
sb.append("’");
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("“");
break;
case '/u8221':
sb.append("”");
break;
...
我的编译器抛出这个抱怨:
Out.java:[346,21] unclosed character literal
我对如何进行这种替换并让它跨平台可靠地工作感到困惑。有人有任何指示吗?提前致谢。
【问题讨论】:
-
不使用大引号怎么样?
-
...等等,应该是
case '/u8221':还是case '\u8221':? -
Re: Unicode 转义 - 我看到 2 个 switch case 有不同的斜杠 - \ 和 /
-
@Matt:数据来自我们的 CMS,营销人员在其中放入他们想要的任何疯狂的东西。 :)
-
@Sean McMains - 请参阅此答案以了解如何转义任何 Unicode 代码点:stackoverflow.com/questions/1273986/…
标签: java unicode html-entities