当前位置:  开发笔记 > 编程语言 > 正文

如何从C#中读取中文文本?

如何解决《如何从C#中读取中文文本?》经验,为你挑选了2个好方法。

如何使用C#读取中文文本文件,我当前的代码无法显示正确的字符:

try
{    
    using (StreamReader sr = new StreamReader(path,System.Text.Encoding.UTF8))
    {
        // This is an arbitrary size for this example.
        string c = null;

        while (sr.Peek() >= 0)
        {
            c = null;
            c = sr.ReadLine();
            Console.WriteLine(c);
        }
    }
}
catch (Exception e)
{
    Console.WriteLine("The process failed: {0}", e.ToString());
}

Jon Skeet.. 8

您需要对文件使用正确的编码.你知道编码是什么吗?它可能是UTF-16,又名Encoding.Unicode,或者可能是Big5.真的,你应该尽力找出而不是猜测.

正如leppie的回答所提到的,问题也可能是控制台的功能.要确定,请将字符串的Unicode字符值转储为数字.有关更多信息,请参阅我关于调试unicode问题的文章以及转储字符串内容的有用方法.

我也会避免使用您当前用于逐行读取文件的代码.相反,使用类似的东西:

using (StreamReader sr = new StreamReader(path, appropriateEncoding))
{
    string line;
    while ( (line = sr.ReadLine()) != null)
    {
        // ...
    }
}

调用Peek()要求流能够搜索,这对于文件而不是所有流都可能是正确的.还要查看File.ReadAllText和File.ReadAllLines,如果这是你想要做的 - 它们是非常方便的实用方法.



1> Jon Skeet..:

您需要对文件使用正确的编码.你知道编码是什么吗?它可能是UTF-16,又名Encoding.Unicode,或者可能是Big5.真的,你应该尽力找出而不是猜测.

正如leppie的回答所提到的,问题也可能是控制台的功能.要确定,请将字符串的Unicode字符值转储为数字.有关更多信息,请参阅我关于调试unicode问题的文章以及转储字符串内容的有用方法.

我也会避免使用您当前用于逐行读取文件的代码.相反,使用类似的东西:

using (StreamReader sr = new StreamReader(path, appropriateEncoding))
{
    string line;
    while ( (line = sr.ReadLine()) != null)
    {
        // ...
    }
}

调用Peek()要求流能够搜索,这对于文件而不是所有流都可能是正确的.还要查看File.ReadAllText和File.ReadAllLines,如果这是你想要做的 - 它们是非常方便的实用方法.



2> didier..:

如果是简体中文,通常是gb2312;对于繁体中文,通常是Big5:

// gb2312 (codepage 936) :
System.Text.Encoding.GetEncoding(936)

// Big5 (codepage 950) :
System.Text.Encoding.GetEncoding(950)

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有