日期:2014-05-18  浏览次数:20854 次

streamreader不能读取中文
源码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace TestApplication
{
  class Program
  {
  static void Main()
  {
  string strLine;
  try
  {
  FileStream kkFile = new FileStream(@"c:\kk.txt", FileMode.Open);
  StreamReader kkReader = new StreamReader(kkFile);
  strLine = kkReader.ReadLine();
  while (strLine != null)
  {
  Console.WriteLine(strLine);
  strLine = kkReader.ReadLine();
  }
  kkReader.Close();
  }
  catch(IOException ex)
  {
  Console.WriteLine(ex.ToString());
  return;
  }
  Console.ReadKey();
  }
  }
}

kk.txt文件内容如下:
<CABIN>
<HEAD>5170500011||081223000000||粤海508||||11||9||220831.00||6142||10||081225||081224||江海运输(2)||肇庆港(5177)||||||</HEAD>
<ORDER>5170500011||081223000000||粤海508||1||HZQC8C0592||高要怡发金属工业有限公司||珠江中转物流有限公司||香港(110)||肇庆(5177)||肇庆港(51770)||081224||生铁铸件||21||木箱(1)||0||||1||23183.00
<CONTA>5170500011||081223000000||HZQC8C0592||1||WHLU2682045||20GP||WHLN926876</CONTA>
</ORDER>
<ORDER>5170500011||081223000000||粤海508||2||HZQC8C0591||德庆迪爱生合成树脂有限公司||珠江中转物流有限公司||香港(110)||肇庆(5177)||肇庆港(51770)||081224||松香树脂||649||包(6)||0||||1||21295.00
<CONTA>5170500011||081223000000||HZQC8C0591||1||OOLU5795611||40HQ||OOLQ186407</CONTA>
</ORDER>
<ORDER>5170500011||081223000000||粤海508||3||HZQT8C0635||肇庆长信经济贸易有限公司||珠江中转物流有限公司||香港(110)||肇庆(5177)||肇庆港(51770)||081224||未磨肉桂||418||件(9)||0||||1||14596.00
执行源码,读不到中文,请问哪里问题了



------解决方案--------------------
C# code

 FileStream kkFile = new FileStream(@"c:\kk.txt", FileMode.Open);
                StreamReader kkReader = new StreamReader(kkFile,[color=#FF0000]System.Text.Encoding.Default[/color]);
                strLine = kkReader.ReadLine();
                while (strLine != null)
                {
                    Console.WriteLine(strLine);
                    strLine = kkReader.ReadLine();
                }
                kkReader.Close();

------解决方案--------------------
将kk.txt的编码改成UTF-8即可,本地已经测试。

MSDN:
StreamReader 旨在以一种特定的编码输入字符,而 Stream 类用于字节的输入和输出。使用 StreamReader 读取标准文本文件的各行信息。

除非另外指定,StreamReader 的默认编码为 UTF-8,而不是当前系统的 ANSI 代码页。UTF-8 可以正确处理 Unicode 字符并在操作系统的本地化版本上提供一致的结果。

------解决方案--------------------
或:
StreamReader kkReader = new StreamReader(kkFile, System.Text.Encoding.Default);