字符串Ansi到UTF-8

本文关键字:UTF-8 Ansi 字符串 | 更新日期: 2023-09-27 18:16:51

有问题。有大的ANsi文本文件。

用如下函数逐行读取:

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?由于

字符串Ansi到UTF-8

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

编辑:一些链接:
  • http://msdn.microsoft.com/en-us/library/system.text.encoding.utf8 (v = vs.110) . aspx
  • http://msdn.microsoft.com/en-us/library/ds4kkd55.aspx

首先需要从文件中读取字节,然后使用Encoding.GetEncoding(1252);要获得ANSI编码(代码页可能会有所不同),那么您可以使用GetString来获得内部。net字符串或将其转换为另一种编码。

试试这样写:

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");
}

如果您使用的是。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))
        {
        }
    }
}