将.txt文件转换为unicode

时间:2009-08-18 08:15:16

标签: c# unicode

有没有办法可以使用c#?

将.txt文件转换为unicode

5 个答案:

答案 0 :(得分:6)

只有当您知道用于生成.txt文件的原始编码时(并且这不是C#或.NET语言的限制,这是一个普遍的问题)。

阅读The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),了解为什么如果您不知道编码,“纯文本”毫无意义。

答案 1 :(得分:5)

如果您只在文本文件中使用ASCII字符,则它们已经是Unicode,编码为UTF-8。

如果您需要不同的编码字符(UTF16 / UCS2等),任何支持Unicode的语言都应该能够读取一个编码并写出另一个编码。

System.Text.Encoding内容将根据以下示例执行 - 它将UTF16输出为UTF8和ASCII,然后再返回(代码无意中从here被盗)。

using System;
using System.IO;
using System.Text;

class Test {
    public static void Main() {        
        using (StreamWriter output = new StreamWriter("practice.txt")) {
            string srcString = "Area = \u03A0r^2"; // PI.R.R

            // Convert the UTF-16 encoded source string to UTF-8 and ASCII.
            byte[] utf8String = Encoding.UTF8.GetBytes(srcString);
            byte[] asciiString = Encoding.ASCII.GetBytes(srcString);

            // Write the UTF-8 and ASCII encoded byte arrays. 
            output.WriteLine("UTF-8  Bytes: {0}",
                BitConverter.ToString(utf8String));
            output.WriteLine("ASCII  Bytes: {0}",
                BitConverter.ToString(asciiString));

            // Convert UTF-8 and ASCII encoded bytes back to UTF-16 encoded  
            // string and write.
            output.WriteLine("UTF-8  Text : {0}",
                Encoding.UTF8.GetString(utf8String));
            output.WriteLine("ASCII  Text : {0}",
                Encoding.ASCII.GetString(asciiString));

            Console.WriteLine(Encoding.UTF8.GetString(utf8String));
            Console.WriteLine(Encoding.ASCII.GetString(asciiString));
        }
    }
}

答案 2 :(得分:2)

以下是一个例子:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace utf16
{
    class Program
    {
        static void Main(string[] args)
        {
            using (StreamReader sr = new StreamReader(args[0], Encoding.UTF8))
            using (StreamWriter sw = new StreamWriter(args[1], false, Encoding.Unicode))
            {
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    sw.WriteLine(line);
                }
            }
        }
    }
}

答案 3 :(得分:1)

如果确实需要更改编码(请参阅Pax关于UTF-8是有效Unicode的答案),那么是的,你可以很容易地做到这一点。查看System.Text.Encoding类。

答案 4 :(得分:1)

有一个很好的page on MSDN,包括一个完整的例子:

   // Specify the code page to correctly interpret byte values
    Encoding encoding = Encoding.GetEncoding(737); //(DOS) Greek code page
    byte[] codePageValues = System.IO.File.ReadAllBytes(@"greek.txt");

    // Same content is now encoded as UTF-16
    string unicodeValues = encoding.GetString(codePageValues);