iteye_15601 2012-11-16 12:57
浏览 213
已采纳

java编码问题求解!!

[code="java"]
String str = "kljkljkljlkjkljkl";
String conversionEncode = new String(str.getBytes(), "UTF-16");
File file = new File("d://text.txt");
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file)));
writer.write(conversionEncode);
writer.flush();

    BufferedReader reader = new BufferedReader(new InputStreamReader(
            new FileInputStream(file)));
    System.out.println(new String(reader.readLine().getBytes(), "UTF-16"));
    System.out.println(conversionEncode);

[/code]

为什么我用UTf-16写入文件,然后在用UTF-16读出来就是乱码,而且文件里面,打开也全是???,如果改为用UTF-32就全是什么YY这类的,这是什么原因啊。只要想同的编码写的,然后再用相同的编码去读不就没有乱码吗?这是为什么呢?但是如果改为UTF-8,写和读就能正常显示。。。请问大牛啊 。帮忙解释一下原因是什么。

  • 写回答

6条回答 默认 最新

  • cpszgy 2012-11-16 14:48
    关注

    大哥,你这种写法是不是又问题。。。
    你这用法是不对的。既然用到OutputStreamWriter ,InputStreamReader然后又用到了readline。你就在OutputStreamWriter InputStreamReader直接指定字符集好么。
    哪有你这么用的。
    [code="java"]

    File file = new File("d://text.txt");

    file.createNewFile();
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(

    new FileOutputStream(file),"utf-16"));

    writer.write(str);

    writer.flush();

        BufferedReader reader = new BufferedReader(new InputStreamReader(  
                new FileInputStream(file),"utf-16"));  
        System.out.println(reader.readLine());  [/code]
    

    而且你这个用法也太奇怪了。[code="java"]
    String str = "kljkljkljlkjkljkl";

    String conversionEncode = new String(str.getBytes(), "UTF-16"); [/code]
    你这个我就看不懂了。本来好好的一个String,你先拿到字节又用UTF-16组装。你这个时候输出下着个conversionEncode 看看是不是已经乱码了。
    [code="java"]new String(reader.readLine().getBytes(), "UTF-16")[/code]
    这个输出的时候也是先拿到字符,再拿到字节,又组装成字符。这不是太那个啥了。这个肯定乱的。
    至于你的UTF-8为什么可以,那是因为系统的str.getBytes()用的默认字符是GBK,二GBK和UTF-8对英文的标示刚好一样(或者是GBK解析得到的字接数组刚好在UTF-8的范围类可以逆转换,我就不做实验了)。你可以试试中文,你看你的UTF-8是不是也不可以用了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端