Java中转义的ASCII到HTML实体

Java中转义的ASCII到HTML实体,java,escaping,ascii,html-entities,Java,Escaping,Ascii,Html Entities,我发现这个网站有转义码,我只是想知道是否有人已经这么做了,这样我就不必花几个小时来构建这个逻辑: StringBuffer sb = new StringBuffer(); int n = s.length(); for (int i = 0; i < n; i++) { char c = s.charAt(i); switch (c) { case '\u25CF': sb.append("&#9679;"); break;

我发现这个网站有转义码,我只是想知道是否有人已经这么做了,这样我就不必花几个小时来构建这个逻辑:

 StringBuffer sb = new StringBuffer();
 int n = s.length();
 for (int i = 0; i < n; i++) {
     char c = s.charAt(i);
     switch (c) {
         case '\u25CF': sb.append("&#9679;"); break;
         case '\u25BA': sb.append("&#9658;"); break;

         /*
         ... the rest of the hex chars literals to HTML entities
         */  

         default:  sb.append(c); break;
     }
 }
StringBuffer sb=new StringBuffer();
int n=s.长度();
对于(int i=0;i
嗯,如果你做了这样的事情会怎么样:

if (c > 127) {
    sb.append("&#" + (int) c + ";");
} else {
    sb.append(c);
}
然后,您只需要确定希望HTML转义的字符范围。在本例中,我只指定了ASCII表空间之外的任何字符。

这些“代码”只是实际字符unicode值的十进制表示。在我看来,像这样的事情是可行的,除非你想对哪些代码被转换,哪些不被转换非常严格

StringBuilder sb = new StringBuilder();
 int n = s.length();
 for (int i = 0; i < n; i++) {
     char c = s.charAt(i);
     if (Character.UnicodeBlock.of(c) != Character.UnicodeBlock.BASIC_LATIN) {
        sb.append("&#");
        sb.append((int)c);
        sb.append(';');
     } else {
        sb.append(c);
     }

 }
StringBuilder sb=新建StringBuilder();
int n=s.长度();
对于(int i=0;i
对于代理项对,其他答案不正确,例如,如果您有表情符号,例如“请看这篇文章……您想要完全相同的值,还是需要将一些值转换为其他值?另请参阅:@Mat Banik-re:the results;您确定在编译阶段没有代码转换错误吗?看这里:看起来Pawel有一个更完整的答案。255对于ASCII来说太高了-它只有7位,所以你想要127。你也应该注意代理项对。(这意味着迭代代码点,而不是代码单元。)正如Paŭlo所提到的,此代码对于代理项对(例如emojis)是断开的。请参阅以了解如何正确处理它们。