zoukankan      html  css  js  c++  java
  • C#和JAVA文件的UTF8格式互换

    web项目用JAVA写,安装程序用C#写成,安装时需要利用C#程序读取.java文件,该文件编码格式是UTF-8,一开始这样来读写JAVA文件的:
          using (StreamReader sr =
              new StreamReader(new FileStream(filePath, FileMode.Open),
              System.Text.Encoding.UTF8))
       {
        using (StreamWriter sw =
               new StreamWriter(new FileStream(newFile, FileMode.Create),
               System.Text.Encoding.UTF8))
        {
         string line = "";
         while ((line = sr.ReadLine()) != null)
         {
          for (int i = 0; i < args.Length; i++)
          {
           if (line.Contains(args[i]))
           {
            if (!line.Contains("=")) break;
            int offset = line.IndexOf('=');
            string replacedStr = line.Substring(offset + 1);
            line = line.Replace(replacedStr, " " + values[i] + ";");
           }
          }
          sw.WriteLine(line);
         }
        }
       }

    结果发现生成的JAVA文件总是含有乱码,后来调研得知:

    使用 Encoding.UTF8 是自动带 三 byte 的 BOM,如果要不添加 BOM。应该改用 UTF8Encoding utf8 = new UTF8Encoding(是否添加 BOM);

    而JAVA文件的头中不包含这三个字节的BOM,因此C#源码改为如下一切恢复正常:

    UTF8Encoding utf8 = new UTF8Encoding(false);

       using (StreamReader sr =
        new StreamReader(new FileStream(filePath, FileMode.Open),
        utf8))
       {
        using (StreamWriter sw =
         new StreamWriter(new FileStream(newFile, FileMode.Create),
         utf8))
        {
         string line = "";
         while ((line = sr.ReadLine()) != null)
         {
          for (int i = 0; i < args.Length; i++)
          {
           if (line.Contains(args[i]))
           {
            if (!line.Contains("=")) break;
            int offset = line.IndexOf('=');
            string replacedStr = line.Substring(offset + 1);
            line = line.Replace(replacedStr, " " + values[i] + ";");
           }
          }
          sw.WriteLine(line);
         }
         sr.Close();
         sw.Close();
        }
       }

  • 相关阅读:
    [初赛备战]计算机基础知识错题集(1)
    [POJ2976][POJ2728]01分数规划问题的二分答案解法
    关于字符串哈希一些模板和心得
    [算法笔记]分块算法从入门到TLE
    [CodeForces510c]Fox And Names
    C++/C语言入门简单教程(深圳中学科学联盟信息学会)
    [BZOJ1878][SDOI2009]HH的项链解题报告
    [BZOJ3717][PA2014]Pakowanie解题报告
    转 各种浏览器的内核是什么
    深入理解CSS3 Animation 帧动画
  • 原文地址:https://www.cnblogs.com/pricks/p/1575465.html
Copyright © 2011-2022 走看看