我现在遇到这样的情况,
有一个文本文件要作为简繁体词汇互换的数据字典,ansi编码的(业务需要不能且不允许转为UTF8的),内容既有GBK的汉字,又有BIG5的汉字.
例如:
塑料 塑膠
达芬奇 達聞西
(注意:
塑料,达芬奇是GBK编码,塑膠,達聞西是big5编码)C#用streamreader只能以一种编码方式来读,要么是GBK,要么是BIG5,用ansi干脆读不到任何中文,这样readline()出来的结果,都无法同时取到塑料/塑膠的正确byte[],也无法转成string进行操作但是,这个文件原来是c写的程序生成的,后来又用delphi作过扩展,都是非常正常地使用的.但是现在转为C#,却无从下手了.无法读取,也无法输出.输出的时候,不知道 塑料的getBytes()怎么跟 塑膠的getBytes()合并在一起,同时也无法用ansi直接保存到文件那么我想,如果用C#做类似Ultra Edit的16进制编辑器,要怎么读取编辑文件呢?请教各位高手!!!

解决方案 »

  1.   

    关键是 ANSI 的编码,能够使混合的语言么? 你理不理解编码的? 
      
      

  2.   

    cangwu_lee(橙子) 
    你留个email,我传个这样子的ansi文件给你用notepad直接能修改的
      

  3.   

    繁体的未必是big5
    大陆的字符集当然包括繁体的~
      

  4.   

    //无法读取,也无法输出
    你不会不要说无法!
    .NET当然可以处理二进制文件,直接用FileStream读到byte数组即可
      

  5.   

    用ascii编码读好象是不能得到大于128的字符的吧,要用gb2312和big5编码读就可以了.象LZ这种情况是可以用多个reader处理的,不过挺麻烦的,不如按字节读出来后再按某种格式转换为字符串可能会更好.static void Main(string[] args)
    {
    string fileName=@"d:\test.txt";
    StreamReader gbReader=new StreamReader(fileName, Encoding.GetEncoding("gb2312"), false, 1);
    StreamReader bgReader=new StreamReader(fileName, Encoding.GetEncoding("big5"), false, 1); int i=0;
    int pos=0; while(i>=0)
    {
    gbReader.BaseStream.Position =pos;
    gbReader.DiscardBufferedData();
    while(i!=32)
    {
    i=gbReader.Read();
    if(i<0)
    break;
    else if(i>255)
    pos+=2;
    else
    pos++;
    Console.Write((char)i);
    } bgReader.BaseStream.Position =pos;
    bgReader.DiscardBufferedData();
    while(i!='\n')
    {
    i=bgReader.Read();
    if(i<0)
    break;
    else if(i>255)
    pos+=2;
    else
    pos++;
    Console.Write((char)i);
    }
    }
    bgReader.Close();
    gbReader.Close();
    Console.ReadLine();
    }
      

  6.   

    viena,cangwu_lee等毛躁的人忽略之.Brunhild的思路虽然可以,但是还要在两个reader之间找对应关系.比较麻烦