前端頁面若需顯示特殊字符或避免編碼問題,常將字符串轉為 Unicode 轉義序列(&#xXXXX;)。本文提供可直接部署的 ToUnicode 工具類與 JSP 調用範例。
package com.edgewww.util;
import java.io.UnsupportedEncodingException;
public class ToUnicode {
/**
* 將字符串轉為 Unicode HTML 實體(&#xXXXX;)
* @param strText 待轉換字符串
* @param code 原字符串編碼(如 GBK、UTF-8)
* @return 轉義後字符串
*/
public String toUnicode(String strText, String code) throws UnsupportedEncodingException {
// 先按 ISO-8859-1 讀取位元組,再按指定編碼重組為字符
strText = new String(strText.getBytes("8859_1"), code);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < strText.length(); i++) {
char c = strText.charAt(i);
int codePoint = (int) c;
if (codePoint > 127) { // 非 ASCII 轉義
sb.append("").append(Integer.toHexString(codePoint)).append(";");
} else {
sb.append(c);
}
}
return sb.toString();
}
}
<%@ page contentType="text/html;charset=Big5" %>
<jsp:useBean id="g2u" scope="session" class="com.edgewww.util.ToUnicode" />
<%
String lang = "這是簡體中文";
%>
原文:<%= lang %><br/>
Unicode:<%= g2u.toUnicode(lang, "GBK") %>
原文:這是簡體中文
Unicode:這是簡體中文
strText.getBytes("8859_1") 假設 JSP 頁面編碼為 ISO-8859-1;若頁面已為 UTF-8,直接用 strText.getBytes("UTF-8") 或省略轉碼步驟。charAt 僅處理 BMP 字符(U+0000~U+FFFF),Emoji 等輔助平面字符需用 codePointAt + Character.toChars。ToUnicode 實例(如 application 作用域),或改用 Apache Commons Text StringEscapeUtils.escapeEcmaScript()。${#strings.escapeXml()}、${#strings.escapeJava()},無需手工轉碼。