System.out.print编码问题

chengxiaorong 2010-02-02 09:20:17
我从properties文件中取出的字符串,通过分割的到结果如下,“\u9001\u76d1\u5bdf\u5904\u9886\u5bfc\u5ba1\u6838”
,然后用System.out.print打印出来,是原样输出。而我直接用
new String ("\u9001\u76d1\u5bdf\u5904\u9886\u5bfc\u5ba1\u6838")手动写死的,然后打印出来的直接是中文。不知道是何原因。。。
...全文
516 27 打赏 收藏 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
wswzwz 2010-02-02
  • 打赏
  • 举报
回复
怎么解决的?
chengxiaorong 2010-02-02
  • 打赏
  • 举报
回复
感谢各位,问题已解决。
tian2012 2010-02-02
  • 打赏
  • 举报
回复
送监察处领导审核
windgh 2010-02-02
  • 打赏
  • 举报
回复
你的分割是自己读的properties文件,不是用Properties对象load的吧
你自己读的时候,readLine()出来,java给你的实际上是"\\u9001\\u76d1\\u5bdf\\u5904\\u9886\\u5bfc\\u5ba1\\u6838",当然会原样输出了
你自己测试print的时候,是写死的unicode,当然会自动帮你转成中文了啊

如果还是确定要自己readLine(),建议你去看看Properties的load方法,看一下它怎么处理的,然后你把分割之后的字符串再按同样的方式处理一下就行了
bayougeng 2010-02-02
  • 打赏
  • 举报
回复
	public static void main(String[] arg) throws UnsupportedEncodingException{
// 这里是从属性文件中读出的字符串
String[] str = "\\u9001\\u76d1\\u5bdf\\u5904\\u9886\\u5bfc\\u5ba1\\u6838".split("\\\\u");
int[] arr = new int[str.length];
for(int i = 1; i< str.length;i++){
arr[i] = Integer.parseInt(str[i], 16);
}
System.out.println(new String(arr, 1, arr.length - 1));
}
hzq237 2010-02-02
  • 打赏
  • 举报
回复
学习!
humman7 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 chengxiaorong 的回复:]
我从properties文件中取出的字符串,通过分割的到结果如下,“\u9001\u76d1\u5bdf\u5904\u9886\u5bfc\u5ba1\u6838”
,然后用System.out.print打印出来,是原样输出。而我直接用
new String ("\u9001\u76d1\u5bdf\u5904\u9886\u5bfc\u5ba1\u6838")手动写死的,然后打印出来的直接是中文。不知道是何原因。。。
[/Quote]
请问你用什么方法读的property,可以换个方法试试
chengxiaorong 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wswzwz 的回复:]
native2ascii -encoding GBK D:\src\resources.properties D:\classes\resources.properties
[/Quote]
这个方案不行,我是通过WebService获取文件内容,然后传到另一个应用程序中。
plplum 2010-02-02
  • 打赏
  • 举报
回复
是不行的。我以前遇到过。读出来后就没法转义了
wswzwz 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wswzwz 的回复:]
引用 6 楼 chengxiaorong 的回复:
引用 5 楼 wswzwz 的回复:
File file = new File("d:\\123.txt");
路径要用\转义\对吧。如果你的路径是写在文件里
文件里这样写d:\123.txt
代码是不是直接File file = new File(从文件读出的path);
是不是就可以了。
同样的
你在properties里读出的
\u9001\u76d1\u5bdf\u5904\u9886\u5bfc\u5ba1\u6838
读出来后\被转义了,实际上在代码里成了\\u9001\\u76d1\\u5bdf\\u5904\\u9886\\u5bfc\\u5ba1
所以原样打出了。
你直接写死的\u9001\u76d1\u5bdf\u5904\u9886\u5bfc\u5ba1\u6838当然认为是unicode编码的会转换为汉字输出了。

你的意思我明白了。有没有什么解决的办法啊?能将已经转义后的搞成转义前。

配置文件里\u也编码保存
[/Quote]
native2ascii -encoding GBK D:\src\resources.properties D:\classes\resources.properties
wswzwz 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chengxiaorong 的回复:]
引用 5 楼 wswzwz 的回复:
File file = new File("d:\\123.txt");
路径要用\转义\对吧。如果你的路径是写在文件里
文件里这样写d:\123.txt
代码是不是直接File file = new File(从文件读出的path);
是不是就可以了。
同样的
你在properties里读出的
\u9001\u76d1\u5bdf\u5904\u9886\u5bfc\u5ba1\u6838
读出来后\被转义了,实际上在代码里成了\\u9001\\u76d1\\u5bdf\\u5904\\u9886\\u5bfc\\u5ba1
所以原样打出了。
你直接写死的\u9001\u76d1\u5bdf\u5904\u9886\u5bfc\u5ba1\u6838当然认为是unicode编码的会转换为汉字输出了。

你的意思我明白了。有没有什么解决的办法啊?能将已经转义后的搞成转义前。
[/Quote]
配置文件里\u也编码保存
bayougeng 2010-02-02
  • 打赏
  • 举报
回复
好像搞错了哦,\u不能理解成一个字符,它不占字符,只说明后面是一个编码。
chengxiaorong 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 focusforce 的回复:]

哦,不好意思没看清前面:),你直接用
String str = new String("读出来的properties里面的值".getBytes(),"UTF-8");
试试吧

[/Quote]不行。
bayougeng 2010-02-02
  • 打赏
  • 举报
回复
是转义的问题。
你手输的\u告诉java,后面是一个编码。也就是说,\u被理解成一个转义字符。
而从文件读的话,\u被理解成\\u(注意,是两个字符\+u)。所以当然是原样的。
找出\u这个转义符的asc码,然后将字符串中的\u(两个字符)替换掉。
focusforce 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 focusforce 的回复:]
String str = new String("\u9001\u76d1\u5bdf\u5904\u9886\u5bfc\u5ba1\u6838".getBytes());
System.out.println(str);

输出为:送监察处领导审核
我的控制台使用了UTF-8编码。

[/Quote]

哦,不好意思没看清前面:),你直接用
String str = new String("读出来的properties里面的值".getBytes(),"UTF-8");
试试吧
chengxiaorong 2010-02-02
  • 打赏
  • 举报
回复
回楼上,我读到String中时,内容已经变成“\\u9001\\u76d1\\u5bdf\\u5904\\u9886\\u5bfc\\u5ba1\\u6838”了。
focusforce 2010-02-02
  • 打赏
  • 举报
回复
String str = new String("\u9001\u76d1\u5bdf\u5904\u9886\u5bfc\u5ba1\u6838".getBytes());
System.out.println(str);

输出为:送监察处领导审核
我的控制台使用了UTF-8编码。
chengxiaorong 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wswzwz 的回复:]
File file = new File("d:\\123.txt");
路径要用\转义\对吧。如果你的路径是写在文件里
文件里这样写d:\123.txt
代码是不是直接File file = new File(从文件读出的path);
是不是就可以了。
同样的
你在properties里读出的
\u9001\u76d1\u5bdf\u5904\u9886\u5bfc\u5ba1\u6838
读出来后\被转义了,实际上在代码里成了\\u9001\\u76d1\\u5bdf\\u5904\\u9886\\u5bfc\\u5ba1
所以原样打出了。
你直接写死的\u9001\u76d1\u5bdf\u5904\u9886\u5bfc\u5ba1\u6838当然认为是unicode编码的会转换为汉字输出了。
[/Quote]
你的意思我明白了。有没有什么解决的办法啊?能将已经转义后的搞成转义前。
wswzwz 2010-02-02
  • 打赏
  • 举报
回复
File file = new File("d:\\123.txt");
路径要用\转义\对吧。如果你的路径是写在文件里
文件里这样写d:\123.txt
代码是不是直接File file = new File(从文件读出的path);
是不是就可以了。
同样的
你在properties里读出的
\u9001\u76d1\u5bdf\u5904\u9886\u5bfc\u5ba1\u6838
读出来后\被转义了,实际上在代码里成了\\u9001\\u76d1\\u5bdf\\u5904\\u9886\\u5bfc\\u5ba1
所以原样打出了。
你直接写死的\u9001\u76d1\u5bdf\u5904\u9886\u5bfc\u5ba1\u6838当然认为是unicode编码的会转换为汉字输出了。
chengxiaorong 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 icy_csdn 的回复:]
:)
System.out.print(new String(your properties))
[/Quote]不行,还是原样输出
加载更多回复(7)

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧