字符串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?由于
尝试使用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))
{
}
}
}