在开发j2me浏览器时,对于html的unicode实体编码,我们需要将转换才能正常显示。如下面这样一段代码:
返回移动梦网
方法如下:
private static String decodeUnicode(final String dataStr) {
int start = 0;
int end = 0;
final StringBuffer buffer = new StringBuffer();
while (start > -1) {
int system = 10;//进制
if(start==0){
int t = dataStr。
indexOf("");
if(start!=t)start = t;
}
end = dataStr。indexOf(";", start 2);
String charStr = "";
if (end != -1) {
charStr = dataStr。
substring(start 2, end);
//判断进制
char s = charStr。charAt(0);
if(s=='x' || s=='X'){
system = 16;
charStr = charStr。substring
(1);
}
}
//转换
try{
char letter = (char) Integer。
parseInt(charStr,system);
buffer。append(new Character(letter)。toString());
}catch(NumberFormatException e){
e。printStackTrace();
}
//处理当前unicode字符到下一个unicode字符之间的非unicode字符
start = dataStr。
indexOf("",end);
if(start-end>1){
buffer。append(dataStr。substring(end 1, start));
}
//处理最后面的非unicode字符
if(start==-1){
int length = dataStr。
length();
if(end 1!=length){
buffer。append(dataStr。substring(end 1,length));
}
}
}
return buffer。toString();
}。
简体中文有两种常用编码:GB2312 和 Unicode。 它们的对应关系可以用 下面的程式所生成: /** * GB2312Unicde。java * Copyright (c) 2003 by Dr。 Herong Yang, 。
herongyang。com/ */ import java。io。*; import java。nio。*; import java。nio。charset。*; class GB2312Unicde { static OutputStream out = null; static char hexDigit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; static int b_out[] = {201,267,279,293,484,587,625,657,734,782,827, 874,901,980,5590}; static int e_out[] = {216,268,280,294,494,594,632,694,748,794,836, 894,903,994,5594}; public static void main(String[] args) { try { out = new FileOutputStream("gb2312。
gb"); writeCode(); out。close(); } catch (IOException e) { System。out。println(e。toString()); } } public static void writeCode() throws IOException { boolean reserved = false; String name = null; // GB2312 is not supported by JDK。
So I am using GBK。 CharsetDecoder gbdc = Charset。forName("GBK")。newDecoder(); CharsetEncoder uxec = Charset。forName("UTF-16BE")。
newEncoder(); CharsetEncoder u8ec = Charset。forName("UTF-8")。newEncoder(); ByteBuffer gbbb = null; ByteBuffer uxbb = null; ByteBuffer u8bb = null; CharBuffer cb = null; int count = 0; for (int i=1; i=1 && i=10 && i=16 && i=56 && i=88 && i> 4) & 0x0F]); out。
write((int) hexDigit[b & 0x0F]); } public static void writeHeader() throws IOException { writeString("
"); writeln(); writeString("Q。
W。 "); writeGBSpace(); writeString(" GB Uni。 UTF-8 "); writeString(" "); writeString("Q。W。 "); writeGBSpace(); writeString(" GB Uni。
UTF-8 "); writeln(); writeln(); } public static void writeFooter() throws IOException { writeString(""); writeln(); } public static boolean validGB(int i,int j) { for (int l=0; l=b_out[l] && i*100 j程式输出的例表格式如下: Q。
W。 GB Uni。 UTF-8 Q。W。 GB Uni。
UTF-8 1601 啊 B0A1 554A E5958A 1602 阿 B0A2 963F E998BF 1603 埃 B0A3 57C3 E59F83 1604 挨 B0A4 6328 E68CA8 1605 哎 B0A5 54CE E5938E 1606 唉 B0A6 5509 E59489 1607 哀 B0A7 54C0 E59380 1608 皑 B0A8 7691 E79A91 1609 癌 B0A9 764C E7998C 1610 蔼 B0AA 853C E894BC 1611 矮 B0AB 77EE E79FAE 1612 艾 B0AC 827E E889BE 1613 碍 B0AD 788D E7A28D 1614 爱 B0AE 7231 E788B1 1615 隘 B0AF 9698 E99A98 1616 鞍 B0B0 978D E99E8D 1617 氨 B0B1 6C28 E6B0A8 1618 安 B0B2 5B89 E5AE89 1619 俺 B0B3 4FFA E4BFBA 1620 按 B0B4 6309 E68C89 1621 暗 B0B5 6697 E69A97 1622 岸 B0B6 5CB8 E5B2B8 1623 胺 B0B7 80FA E883BA 1624 案 B0B8 6848 E6A188 1625 肮 B0B9 80AE E882AE 1626 昂 B0BA 6602 E69882 1627 盎 B0BB 76CE E79B8E 1628 凹 B0BC 51F9 E587B9 1629 敖 B0BD 6556 E69596 1630 熬 B0BE 71AC E786AC 1631 翱 B0BF 7FF1 E7BFB1 1632 袄 B0C0 8884 E8A284 1633 傲 B0C1 50B2 E582B2 1634 奥 B0C2 5965 E5A5A5 1635 懊 B0C3 61CA E6878A 1636 澳 B0C4 6FB3 E6BEB3。