0

有问题。在 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?谢谢

4

3 回答 3

0

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

编辑:一些链接:

于 2013-06-04T21:47:42.150 回答
0

首先你需要从文件中读取字节,然后使用 Encoding.GetEncoding(1252); 要获取 ANSI 编码(代码页可能会有所不同),则可以使用 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");
}
于 2013-06-04T21:59:11.627 回答
0

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

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

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

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

using System.IO;
using System.Text;

...

public void go()
{
    while (true)
    {
        foreach (string line in File.ReadLines(file_path, Encoding.Default))
        {
        }
    }
}
于 2013-06-05T06:21:00.067 回答