问个java字符编码的问题

javacjavacjavac 2008-04-24 07:32:10
问个java字符编码的问题,中文字符用utf8编码,我直接System.out.println("\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7")能够在控制台上打印正出中文来,但是如果\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7在文件中,从文件中读出来再在控制台输出,则输出的还是\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7,若要从文件中读出的时候也能够正确显示其代表的中文字符,该如何处理?
...全文
368 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
anqini 2008-04-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 javacjavacjavac 的帖子:]
问个java字符编码的问题,中文字符用utf8编码,我直接System.out.println("\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7")能够在控制台上打印正出中文来,但是如果\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7在文件中,从文件中读出来再在控制台输出,则输出的还是\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7,若要从文件中读出的时候也能够正确显示其代表的中文字符,该如何处理?
[/Quote]

文件个java程序里对这个字符的认识不一样,文件里的认为它是字符串!但是在java里\xxxx是unicode,不再认为是字符串,你真的要输出这个字符串的话这样写!
System.out.println("\\u5e7f\\u5dde\\u5e02\\u5317\\u4eac\\u8def39\\u53f7");
就像正则表达式里的一样,你要打印出'\',应该System.out.println("\\");
因为\认为是转义符!
joejoe1991 2008-04-25
  • 打赏
  • 举报
回复
上面少打了一句话。

而如果写在了文件里,那在读的时候,\ 会自动转换为\\
也就是,实际读取出来的是:

\\u5e7f\\u5dde\\u5e02\\u5317\\u4eac\\u8def39\\u53f7



所以输出的时候,看到的是文件里保存的字符串,

而不是
"广州市北京路39号
jakocoo 2008-04-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yangstarfly 的回复:]
3楼正确
[/Quote]
joejoe1991 2008-04-25
  • 打赏
  • 举报
回复
代码中的unicode码,在编译的时候,就被会自动转换成相应的字符。(亲爱滴火龙果告诉我滴。。
所以

System.out.println("\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7")



在编译的时候,就被转换成了:
System.out.println("广州市北京路39号");



而如果写在了文件里,那在读的时候,\ 会自动转换为\\
也就是,实际读取出来的是:
\\u5e7f\\u5dde\\u5e02\\u5317\\u4eac\\u8def39\\u53f7


所以输出的时候,看到的是文件里保存的字符串,

"广州市北京路39号"
chjl2020 2008-04-25
  • 打赏
  • 举报
回复
\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7
请问怎样能查到这些码?
或怎样把中文字符转成这种UNICODE码?
谢谢
yangstarfly 2008-04-25
  • 打赏
  • 举报
回复
3楼正确
zuoguodang 2008-04-25
  • 打赏
  • 举报
回复
佩服3楼!
mike123hl 2008-04-25
  • 打赏
  • 举报
回复
学习了
wangshikang_it 2008-04-24
  • 打赏
  • 举报
回复
顶一下
南南北北 2008-04-24
  • 打赏
  • 举报
回复
好好学习,天天向上.
chensjmail 2008-04-24
  • 打赏
  • 举报
回复
和转义字符有关,\u,你存到文件中再读进来,其实就变成了\\u
aking21alinjuju 2008-04-24
  • 打赏
  • 举报
回复
又学习了
云上飞翔 2008-04-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 javacjavacjavac 的帖子:]
问个java字符编码的问题,中文字符用utf8编码,我直接System.out.println("\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7")能够在控制台上打印正出中文来,但是如果\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7在文件中,从文件中读出来再在控制台输出,则输出的还是\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7,若要从文件中读出的时候也能够正确显示其代表的中文字符,该如何处理?
[/Quote]
答:当在程序中的字符串"\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7"表示时,\u5e7f其实在机器内部是一个UNICODE值(不是由这6个字符组成的串)。而文本文件中的\u5e7f\u5dde\u5e02\u5317\u4eac\u8def39\u53f7,其\u5e7f就不是一个UNICODE值,而是由这6个字符组成的串。因此需要转换。
转换的方法代码参考如下:

public static String convert(String utfString)
{
StringBuilder sb = new StringBuilder();
int i=-1;
int pos=0;
while((i=utfString.indexOf("\\u",pos))!=-1)
{
sb.append(utfString.substring(pos,i));
if(i+5<utfString.length())
{
pos=i+6;
sb.append((char)Integer.parseInt(utfString.substring(i+2,i+6),16));
}//if
}//while
return sb.toString();
}

用该方法测试的结果如下:
若:文本文件中的串是:ab\u5e7fdd\u5ddeew\u5e02qq\u531721\u4eac\u8def39\u53f7
则:结果是:ab广dd州ew市qq北21京路39号

以上仅供你参考
joejoe1991 2008-04-24
  • 打赏
  • 举报
回复
以前没注意过,学习一下。
haoxiongok 2008-04-24
  • 打赏
  • 举报
回复
帮顶一下
课程目标:学习Java语言中字符串相关的知识、字符编码常识和正则表达式的使用,并完成案例前导课程:《Java工程师必学系列课程》前4部课程内容:本课程是《Java工程师必学系列课程》的第5部分,主要讲解Java语言中字符串相关知识、字符编码常识和正则表达式的使用。本课程涉及的主要内容可以分为四部分:一、String、StringBuffer和StringBuilder类基本常识、基本原理和使用技巧二、字符编码常识三、Java语言正则表达式的详细语法和使用技巧四、实战案例课程说明:在开发Java程序的过程中,最常用的类莫过于字符串相关的类。可以毫不夸张的说,任何一个Java程序,都离不开对字符串保存和处理。很多学员对字符串的理解只是处于比较粗浅的阶段。殊不知,如果对字符串处理的不好,会影响到软件的运行效率。本课程专门讲解字符串相关的知识,将从字符串的存储方式、底层的运行方式等各方面深入讲解其中的原理和技巧。此外,对字符串进行更高级的处理,又要用到正则表达式的相关知识。正则表达式广泛应用于各种与字符串处理相关的场合。它是一套独立的语言系统,经过几十年的完善和发展,现在已经非常的强大,并且形成了国际标准。各种高级编程语言,都实现了自己的表达式引擎。本课程详细的讲解了Java语言中正则表达式的语法和使用技巧。掌握了正则表达式,对编程水平的提高有非常大的帮助!同时,本课程在最后一部分,安排了非常精彩的、完整的实战案例,通过实战的形式切实帮助学员提高解决具体问题的能力!预期效果:认真学习完本课程,学员可以掌握字符串处理及正则表达式相关的系统知识,并能提高实际的编码水平。环境配置要求:学习本课程需安装JDK1.8或更高版本的JDK,以便程序能正确运行,建议使用IntelliJ IDEA 2019.1.2或更高版本的开发工具。    因有合作协议约束,《穆哥学堂》只提供PDF版本的课件!

62,615

社区成员

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

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