现象描述:用代码查找文本"软件开发゛",死活也找不到“发”,其他文字都能找到。后来发现是“゛”的问题,只要将“゛”删掉就能找到“发”了。想不通是怎么回事,特来请论坛大神解释下啊。(附文本和程序包)
附件:http://download.csdn.net/detail/wangxingang_1982/5945099
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }        private void find_Click(object sender, EventArgs e)
        {
            string str_path;//文件路径
            str_path = textBox1.Text;
            StreamReader strRead = new StreamReader((System.IO.Stream)File.OpenRead(str_path), System.Text.Encoding.Default);
            String line = null;
            while ((line = strRead.ReadLine()) != null)
            {
                int num_wether = line.IndexOf(textBox2.Text);                if (num_wether == -1)
                {
                    MessageBox.Show("无法找到:" + textBox2.Text);
                }
                else
                {
                    MessageBox.Show("可以找到:" + textBox2.Text);
                }
            }
        }        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFile = new OpenFileDialog();//实例化打开对话框对象
            openFile.Filter = "*.txt|*.txt";//设置文件筛选器
            if (openFile.ShowDialog() == DialogResult.OK)//判断是否选择了文件
            {
                textBox1.Text = openFile.FileName;//显示选择的文件
            }
        }
    }

解决方案 »

  1.   

    是的,而且我发现XP系统的记事本能查到,64位win7的查不到!
      

  2.   

    是的,而且我发现XP系统的记事本能查到,64位win7的查不到!我的是32全的win7
      

  3.   

    是的,而且我发现XP系统的记事本能查到,64位win7的查不到!我的是32全的win7
    期待牛人解惑啊
      

  4.   

    是的,而且我发现XP系统的记事本能查到,64位win7的查不到!我的是32全的win7
    期待牛人解惑啊原因就是这个符号“゛”,把它放到“发”前就正常了,放后面搜索不到。好像一放后面就转义成其它字符一样的
      

  5.   

    是的,而且我发现XP系统的记事本能查到,64位win7的查不到!我的是32全的win7
    期待牛人解惑啊原因就是这个符号“゛”,把它放到“发”前就正常了,放后面搜索不到。好像一放后面就转义成其它字符一样的是的,而且我发现XP系统的记事本能查到,64位win7的查不到!我的是32全的win7
    期待牛人解惑啊原因就是这个符号“゛”,把它放到“发”前就正常了,放后面搜索不到。好像一放后面就转义成其它字符一样的
    确实是这样,而且要命的是:像这种特殊字符还不止“゛”一个,还有很多,我在做一个文本搜索统计程序,遇到这种问题真实太头疼了
      

  6.   

    我靠,还真是!难道这么大的问题都没人发现?默认格式是Ansi的,当然表示不了中文了,你把格式换回UTF-8就可以了,这不是什么问题
      

  7.   

    我靠,还真是!难道这么大的问题都没人发现?默认格式是Ansi的,当然表示不了中文了,你把格式换回UTF-8就可以了,这不是什么问题
    我说的是win7记事本
      

  8.   

    我靠,还真是!难道这么大的问题都没人发现?默认格式是Ansi的,当然表示不了中文了,你把格式换回UTF-8就可以了,这不是什么问题跟编码有什么关系,输入“移动”就没问题
      

  9.   

    我靠,还真是!难道这么大的问题都没人发现?默认格式是Ansi的,当然表示不了中文了,你把格式换回UTF-8就可以了,这不是什么问题
    我说的是win7记事本
    我的问题似乎改成UTF-8也不行啊
      

  10.   

    我靠,还真是!难道这么大的问题都没人发现?
    记事本文件另存为UTF-8格式试试
      

  11.   

    我靠,还真是!难道这么大的问题都没人发现?默认格式是Ansi的,当然表示不了中文了,你把格式换回UTF-8就可以了,这不是什么问题
    我说的是win7记事本
    我的问题似乎改成UTF-8也不行啊
    你的问题我没试过,这里禁止下东西,你的附件暂时不下了
      

  12.   

    UTF-8 格式 可以保存  “联通”
      

  13.   

    我靠,还真是!难道这么大的问题都没人发现?默认格式是Ansi的,当然表示不了中文了,你把格式换回UTF-8就可以了,这不是什么问题跟编码有什么关系,输入“移动”就没问题
    你把你记事本另存为Ansi格式试试,管你“移动”部“移动”,看看是不是得到一堆乱码
      

  14.   

    我靠,还真是!难道这么大的问题都没人发现?默认格式是Ansi的,当然表示不了中文了,你把格式换回UTF-8就可以了,这不是什么问题
    我说的是win7记事本ansi在系统里等同于C#代码里的GB2312
      

  15.   

    我靠,还真是!难道这么大的问题都没人发现?默认格式是Ansi的,当然表示不了中文了,你把格式换回UTF-8就可以了,这不是什么问题
    跟编码有什么关系,输入“移动”就没问题
    怪不得联通不如移动呢!
      

  16.   

    我靠,还真是!难道这么大的问题都没人发现?默认格式是Ansi的,当然表示不了中文了,你把格式换回UTF-8就可以了,这不是什么问题跟编码有什么关系,输入“移动”就没问题
    你把你记事本另存为Ansi格式试试,管你“移动”部“移动”,看看是不是得到一堆乱码你要是不明白就不要在这误导人了,好吧?
      

  17.   

    我靠,还真是!难道这么大的问题都没人发现?默认格式是Ansi的,当然表示不了中文了,你把格式换回UTF-8就可以了,这不是什么问题
    我说的是win7记事本ansi在系统里等同于C#代码里的GB2312
    还真是啊,刚试了下
      

  18.   

    我靠,还真是!难道这么大的问题都没人发现?默认格式是Ansi的,当然表示不了中文了,你把格式换回UTF-8就可以了,这不是什么问题跟编码有什么关系,输入“移动”就没问题
    你把你记事本另存为Ansi格式试试,管你“移动”部“移动”,看看是不是得到一堆乱码你要是不明白就不要在这误导人了,好吧?
    还真不明白,误导大众要枪毙,给我判个邢~
      

  19.   

    联通拼不过移动,原因在这里http://wenku.baidu.com/view/d5dfc5fc0242a8956bece4fd.html
      

  20.   

    隐约感觉到我的问题也和编码有关系最好的办法是判断txt文件原来是什么编码,就用什么编码,不然会有乱码。
      

  21.   

    啊啊,我已经搞清楚联通的问题了
    是这样的,首先是UTF-8的编码规则:
    然后系统记事本保存的时候,默认存为ANSI也就是GB2312,然后联通两个字的GB2312编码是C1A0,CDA0,换成二进制的话,刚好两个字都是110X XXXX 10XX XXXX的结构,也就是恰好都符合UTF-8的编码规则,而当整个文档的所有内容都符合UTF-8编码规则的时候,系统就误以为这是一个UTF-8文档,就自作聪明地用UTF-8格式给你打开了,于是出现乱码,而在联通两字后面再随便加点字,使得系统发现这个文档不再符合UTF-8编码规则,它就乖乖地用ANSI给你开了,所以显示就正常了
    为了测试这件事,我去查了一下GB2312表,挑了两个字“穹甫”,它们的编码符合表中的1111 0XXX 10XX XXXX 10XX XXXX 10XX XXXX,果然也不能正常显示
      

  22.   

    本帖附件下载地址:http://pan.baidu.com/share/link?shareid=2274175076&uk=3221504098
      

  23.   

    兄弟,你能搞清楚我的问题吗?我这不是一步步的研究嘛
    我觉得一个可能的原因是:你的゛这个字符,我查了unicode是0x309B,而汉字编码区是0x3400-0x9FA5,也就是说这个字符不属于中文字符,它落在日文字符区(0x3041--0x30FF),虽然GBK是有这个字符,但是GB2312似乎没有这个字符,不知道是不是这个原因
      

  24.   

    MessageBox.Show()之类的函数括号内字符串不能直接用双引号,你试试单引号应该可以或者用\转义,这大概是使用规则吧
      

  25.   

    System.Text.Encoding.Default 默认是 GB2312,找不到你那个字符。
      

  26.   

    文本呢?
    textbox1里不是文本路径吗?文件名就是 软件开发找不到“发”.txt ?
      

  27.   

    应该是编码问题,在VC中可以设置多字节字符集(GBK)和Unicode字符集(utf-16),windows内部是使用utf-16接受和处理数据的。(utf-8一般用来封装需要传输的数据)。我不记得C#项目属性中是否有设置字符集的选项,如果有设置成Unicode字符集,问题应该能解决。
      

  28.   

    兄弟,你能搞清楚我的问题吗?我这不是一步步的研究嘛
    我觉得一个可能的原因是:你的゛这个字符,我查了unicode是0x309B,而汉字编码区是0x3400-0x9FA5,也就是说这个字符不属于中文字符,它落在日文字符区(0x3041--0x30FF),虽然GBK是有这个字符,但是GB2312似乎没有这个字符,不知道是不是这个原因
    越来越接近问题的核心了。那个字符确实是日文字。
    其实我是在做一款免费的QQ群成员聊天排名程序,已经可以统计大部分群的聊天记录了,下载地址:http://pan.baidu.com/share/link?shareid=3837483282&uk=825351447
    但是往往遇到一些带日文的非主流昵称会出问题。
      

  29.   

    win7下用UE打开,可以查找到。
    估计是 记事本 跟 UE 的底层查找处理方法不一样。
    自己写个 查找 方法试试,应该可以查到。
      

  30.   

    给你提个意见!这个统计结果显示在TXT里的时候,能对齐就好了
      

  31.   

    呵呵,确实存在这个问题还有,你这个统计是按名字统计的还是按QQ号统计的?如果一个人中途换过群名片,会被统计成两个人吗?呵呵,确实存在这个问题还有,你这个统计是按名字统计的还是按QQ号统计的?如果一个人中途换过群名片,会被统计成两个人吗?
    按QQ号统计,不会被统计为两个人。但用邮箱登录QQ的除外。