字符串Ansi到UTF-8

时间:2013-06-04 21:43:29

标签: c#

有一些问题。在ANsi中有大的txt文件。

用这样的功能逐行阅读:

private static IEnumerable<string> ReadLineFromFile(TextReader fileReader)
{
    using (fileReader)
    {
        string currentLine;
        while ((currentLine = fileReader.ReadLine()) != null)
        {
            yield return currentLine;
        }
    }
}


public void go()
{
    while (true)
    {
        TextReader readFile = new StreamReader(file_path);
        foreach (string line in ReadLineFromFile(readFile))
        {
        }
    }
}

如何将所有ANSI线路转换为UTF-8?感谢

3 个答案:

答案 0 :(得分:0)

尝试使用Encoding.UTF8.GetBytes()(在System.Text命名空间中)获取与UTF-8字符串对应的字节。在.NET中,所有字符串都是内部Unicode,因此在运行时不存在UTF-8 字符串。相反,当以不同格式编码字符串时,您将使用GetBytes()之类的方法来获取表示内存中编码字符串的字节。

编辑:一些链接:

答案 1 :(得分:0)

首先你需要从文件中读取字节,然后使用Encoding.GetEncoding(1252);要获得ANSI编码(代码页可能为vary),您可以使用GetString获取内部.net-string或将其转换为其他编码。

尝试这样的事情:

private IEnumerable<string> ReadLineFromFile(string path)
{
    byte[] ansiEncodedBytes = File.ReadAllBytes(path);
    Encoding ansi = Encoding.GetEncoding(1252);
    string utf16string = ansi.GetString(ansiEncodedBytes);
    return utf16string.Split("\n");
}

答案 2 :(得分:0)

如果您使用的是.Net 4或更高版本,则可以使用File.ReadLines(string path, Encoding encoding)方法。

这会像ReadLineFromFile()方法一样逐行读取文件,而Encoding参数将允许您指定Encoding.Default。这将告诉它在阅读文本时使用操作系统的当前ANSI代码页。

请注意,字符串将从ANSI转换为UTF16,因为UTF16是C#中用于string的类型。

所以你可以像这样重写你的go()测试方法:

using System.IO;
using System.Text;

...

public void go()
{
    while (true)
    {
        foreach (string line in File.ReadLines(file_path, Encoding.Default))
        {
        }
    }
}