代码之家  ›  专栏  ›  技术社区  ›  Grzenio

UTF-16到UTF-8的转换(用于Windows中的脚本编写)

  •  15
  • Grzenio  · 技术社区  · 17 年前

    将UTF-16文件转换为UTF-8的最佳方法是什么?我需要在cmd脚本中使用它。

    6 回复  |  直到 17 年前
        1
  •  24
  •   Kaarel    17 年前

    有一个GNU工具 recode 您也可以在Windows上使用它。 例如

    recode utf16..utf8 text.txt
    
        2
  •  15
  •   Jon Skeet    17 年前

    Ruby的另一种选择是编写一个小程序。用C#编写的.NET程序(.NET 1.0会很好,但2.0会更简单:)-这是一段相当琐碎的代码。你希望在没有任何其他应用程序的情况下完成它吗?如果你想用一点代码来实现这一点,请添加注释,我会填写答案。..

    编辑: 好吧,这没有任何错误检查,但是。..

    using System;
    using System.IO;
    using System.Text;
    
    class FileConverter
    {
      static void Main(string[] args)
      {
        string inputFile = args[0];
        string outputFile = args[1];
        using (StreamReader reader = new StreamReader(inputFile, Encoding.Unicode))
        {
          using (StreamWriter writer = new StreamWriter(outputFile, false, Encoding.UTF8))
          {
            CopyContents(reader, writer);
          }
        }
      }
    
      static void CopyContents(TextReader input, TextWriter output)
      {
        char[] buffer = new char[8192];
        int len;
        while ((len = input.Read(buffer, 0, buffer.Length)) != 0)
        {
          output.Write(buffer, 0, len);
        }
      }
    }
    
        3
  •  8
  •   Tor Haugen    17 年前

    当然 小心 方法是将脚本加载到记事本中,然后用UTF-8编码再次保存。这是“另存为”对话框中的一个选项。。

        4
  •  7
  •   PhiLho    17 年前

    也许与 iconv ?

        5
  •  3
  •   Ben Collins    4 年前

    您可以使用内置的PowerShell cmdlet轻松完成此操作,您可以从cmd调用:

    C:\> powershell -c "Get-Content mytext.txt | Set-Content -Encoding utf8 mytext_utf8.txt"
    

    编辑:很明显,如果你已经在使用powershell,这会简化。使用别名也会简化事情:

    > gc mytext.txt | sc -Encoding utf8 mytext_utf8.txt
    
        6
  •  1
  •   VonC    17 年前

    如果你安装了ruby发行版,你可以调用ruby脚本来处理转换:

    Ruby script to convert file(s) character encoding

    本着同样的精神: Perl script

    在没有脚本支持的情况下,您必须这样编码 C++ source 使用WideCharToMultiByte()调用。..