views:

3378

answers:

5

Hi, what is the best way to convert a UTF-16 files to UTF-8? I need to use this in a cmd script.

+1  A: 

Certainly, the easiest way is to load the script into notepad, then save it again with the UTF-8 encoding. It's an option in the Save As dialog box..

Tor Haugen
Cheers, I can use it as a workaround, but my script needs to do this conversion, I can't convert every file manually....
Grzenio
A: 

If you have a ruby distribution installed, you can call a ruby script taking care of the conversion:

Ruby script to convert file(s) character encoding

In the same spirit: Perl script

In the absence of script support, you would have to code it like this C++ source using a WideCharToMultiByte() call...

VonC
+2  A: 

An alternative to Ruby would be to write a small .NET program in C# (.NET 1.0 would be fine, although 2.0 would be simpler :) - it's a pretty trivial bit of code. Were you hoping to do it without any other applications at all? If you want a bit of code to do it, add a comment and I'll fill in the answer...

EDIT: Okay, this is without any kind of error checking, but...

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);
    }
  }
}
Jon Skeet
I was hoping there is a utility I could just use :) I would be grateful for a bit of code, cheers.
Grzenio
+3  A: 

Perhaps with iconv?

PhiLho
+5  A: 

There is a GNU tool recode which you can also use on Windows. E.g.

recode utf16..utf8 text.txt
Kaarel
msanders