关于System.out与编码格式的问题 我想java中没有名为"Unicode"的编码吧你把"Unicode"改成"UTF-8"看看 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 肯定是有的,否则会报错误信息:java.io.UnsupportedEncodingException public class UnicodeTest{ public UnicodeTest() { } public static String decode(String s) { StringBuffer sb = new StringBuffer(); boolean escape = false; for(int i=0; i<s.length(); i++) { char c = s.charAt(i); switch (c) { case '\\': escape = true; break; case 'u': case 'U': if (escape) { try { sb.append((char)Integer.parseInt( s.substring(i+1,i+5),16)); escape = false; } catch (NumberFormatException e) { throw new IllegalArgumentException(); } i += 4; } else { sb.append(c); } break; default: sb.append(c); break; } } return sb.toString(); } public static void main(String[] args) { // 假设这个字符串是从文件中读取到的 String s = "\\u6CA1\\u6709"; // 转换并打印 System.out.println(decode(s)); }} 感谢 zxhong(红透半边天),可是你所编写的 UnicodeTest.decode()方法似乎没什么用处,如果只是单纯在默认的环境中显示Unicode编码,那很容易,用不着写一个UnicodeTest类.只需要用:String s = "\u6CA1\u6709";System.out.println(s);即可.问题的关键是它在不同的编码环境下有不同的结果.比如:在Windows 2000中文简体环境下,没有问题。在繁体环境下,如果在选择系统地区设定将系统的语言预设值设为简体,也没有问题,可是如果将语言的语言预设值设为繁体,问题就来了,结果为"?有"。System.out不认识简体了,可是为什么System.out能认识"有"(\u6709)呢?可能是"有"的简体繁体在Unicode中是同一个.而"没"(\u6CA1)的简、繁体的Unicode编码不一样。我的Windows2000同时安装了简、繁体两种语言的字符集,没有道理改变系统的语言预设值就不认另一套字符吧,比如window自带的记事本在打开unicode编码的文件时就能很好的同时识别简体和繁体,可是System.out好象只能认识预设的字符集,是java的问题还是操作系统的问题呢?真另人困惑。 看来平台无关性是不全面的说法JAVA中可能没有提供自动判断字符集编码方式的能力应该是缺陷找找SUN中国公司的人问问呵呵 编码是基础知识,不是java的事。 求大神帮忙解决软件大赛的问题 如何在选项卡上添加关闭按钮? 按姓氏笔画排序在程序中是怎么实现的? 奇怪问题 新手上路,关于Short的问题。 设计一个简单计算器(qiu算法的优化) "\u0000"是什么的ASCII码? JCombobox取值 将数据库中读出的字符串,转换成统一的日期格式,以方便校对 用java通过pop3怎样得到附件? 关于图标的问题 关于自定义例外类和引用自定义例外类的问题
java.io.UnsupportedEncodingException
{ public UnicodeTest()
{
} public static String decode(String s)
{
StringBuffer sb = new StringBuffer();
boolean escape = false;
for(int i=0; i<s.length(); i++)
{
char c = s.charAt(i);
switch (c)
{
case '\\':
escape = true;
break;
case 'u':
case 'U':
if (escape)
{
try
{
sb.append((char)Integer.parseInt(
s.substring(i+1,i+5),16));
escape = false;
}
catch (NumberFormatException e) {
throw new IllegalArgumentException();
}
i += 4;
}
else
{
sb.append(c);
}
break;
default:
sb.append(c);
break;
}
} return sb.toString();
} public static void main(String[] args)
{
// 假设这个字符串是从文件中读取到的
String s = "\\u6CA1\\u6709"; // 转换并打印
System.out.println(decode(s));
}}
只需要用:
String s = "\u6CA1\u6709";
System.out.println(s);
即可.
问题的关键是它在不同的编码环境下有不同的结果.比如:
在Windows 2000中文简体环境下,没有问题。
在繁体环境下,如果在选择系统地区设定将系统的语言预设值设为简体,也没有问题,可是如果将语言的语言预设值设为繁体,问题就来了,结果为"?有"。
System.out不认识简体了,可是为什么System.out能认识"有"(\u6709)呢?可能是"有"的简体繁体在Unicode中是同一个.而"没"(\u6CA1)的简、繁体的Unicode编码不一样。
我的Windows2000同时安装了简、繁体两种语言的字符集,没有道理改变系统的语言预设值就不认另一套字符吧,比如window自带的记事本在打开unicode编码的文件时就能很好的同时识别简体和繁体,可是System.out好象只能认识预设的字符集,是java的问题还是操作系统的问题呢?真另人困惑。
JAVA中可能没有提供自动判断字符集编码方式的能力
应该是缺陷
找找SUN中国公司的人问问
呵呵