zoukankan      html  css  js  c++  java
  • 都过了半年了,又被字符编码搞了

     1     public static void getXmlSource(String link) throws IOException {
     2         // 用链接字符串new出URL对象
     3         URL url = new URL(link);
     4 
     5         // 输入输出流
     6         InputStream in = (InputStream) url.getContent();
     7         BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
     8         FileOutputStream out = new FileOutputStream("xml_resource.xml");
     9         OutputStreamWriter writer = new OutputStreamWriter(out, "UTF-8");
    10 
    11         // 读一行写一行
    12         String line = null;
    13         while ((line = reader.readLine()) != null) {
    14             writer.write(line);;
    15         }
    16 
    17         // 释放资源
    18         writer.close();
    19         out.close();
    20         reader.close();
    21         in.close();
    22 
    23         // 打印成功信息
    24         System.out.println("OK");
    25     }
    先发结果

     作用是把指定URL连接到的XML文件下载下来。

    一开始是全部乱码,我感觉大概是因为资源是UTF-8的,然后输出的不是,于是百度了一下,想把输出的内容先按UTF-8解码再输出,百度到的方法是用字符串的getBytes()方法把字符串转成字节数组,然后重新new一个字符串,用重载的构造方法加上编码类型作为参数,但是出现了很奇怪的情况,输出的文件里大部分显示正常了,但是有一部分内容是乱码,而且乱码的部分也不是生僻字也不是特殊符号的,这样想找办法都无从找起,于是只好另想办法。

    后来发现构造输入流InputStreamReader的时候是可以加上编码作为参数的,一下子觉得找到办法了,于是果断按UTF-8来输入,然后原样输出,不行。

    用上面的办法编码成GBK输出,不行。

    编成UTF-8,不行。

    症状是输出txt显示完全正常,但是输出成xml的话打开会报错,直接编辑会发现里面还是乱码。

    最后就放弃了,上S1问了一下,没想到马上就有答案了……

    输出文件不要用FileWriter,这样的话你输出的编码跟本机的OS和语言有关,用OutputStreamWriter输出,指定UTF-8编码

    java的读写都要指定字符集, 不然默认都是操作系统的字符集来着..

    在java里所有string都是用utf8存的, 只有转为byte串的时候才会转为相应的编码. 所以读取时候指定的字符集只决定了java用什么编码把byte[]转为string, 不影响你读取后存在内存里的string是什么字符集

    结果问题出在细节上……

    于是马上改了改代码,一下就成功了。

    输入输出流都是可以指定字符集的,总之跟编码打交道的时候就不要偷懒用FileWriter了……

  • 相关阅读:
    三:Redis连接池、JedisPool详解、Redisi分布式
    vmware workstation14永久激活密钥分享
    人工智能二:TensorFlow环境搭建
    消息队列二:关于消息队列
    消息队列一:为什么需要消息队列(MQ)?
    java基础进阶一:String源码和String常量池
    人工智能一:Al学习路线
    Python学习二:词典基础详解
    Python学习一:序列基础详解
    什么是Hive
  • 原文地址:https://www.cnblogs.com/chihane/p/3612230.html
Copyright © 2011-2022 走看看