中引用符が含まれている文字列があります。他のダウンストリームシステムを混乱させないように、これらを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
このビットの置換をどのように実行し、プラットフォーム間で確実に機能させることができるかについて、私は困惑しています。誰かがポインタを持っていますか?前もって感謝します。