现象描述:用代码查找文本"软件开发゛",死活也找不到“发”,其他文字都能找到。后来发现是“゛”的问题,只要将“゛”删掉就能找到“发”了。想不通是怎么回事,特来请论坛大神解释下啊。(附文本和程序包)
附件: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;//显示选择的文件
}
}
}
附件: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;//显示选择的文件
}
}
}
期待牛人解惑啊
期待牛人解惑啊原因就是这个符号“゛”,把它放到“发”前就正常了,放后面搜索不到。好像一放后面就转义成其它字符一样的
期待牛人解惑啊原因就是这个符号“゛”,把它放到“发”前就正常了,放后面搜索不到。好像一放后面就转义成其它字符一样的是的,而且我发现XP系统的记事本能查到,64位win7的查不到!我的是32全的win7
期待牛人解惑啊原因就是这个符号“゛”,把它放到“发”前就正常了,放后面搜索不到。好像一放后面就转义成其它字符一样的
确实是这样,而且要命的是:像这种特殊字符还不止“゛”一个,还有很多,我在做一个文本搜索统计程序,遇到这种问题真实太头疼了
我说的是win7记事本
我说的是win7记事本
我的问题似乎改成UTF-8也不行啊
记事本文件另存为UTF-8格式试试
我说的是win7记事本
我的问题似乎改成UTF-8也不行啊
你的问题我没试过,这里禁止下东西,你的附件暂时不下了
你把你记事本另存为Ansi格式试试,管你“移动”部“移动”,看看是不是得到一堆乱码
我说的是win7记事本ansi在系统里等同于C#代码里的GB2312
跟编码有什么关系,输入“移动”就没问题
怪不得联通不如移动呢!
你把你记事本另存为Ansi格式试试,管你“移动”部“移动”,看看是不是得到一堆乱码你要是不明白就不要在这误导人了,好吧?
我说的是win7记事本ansi在系统里等同于C#代码里的GB2312
还真是啊,刚试了下
你把你记事本另存为Ansi格式试试,管你“移动”部“移动”,看看是不是得到一堆乱码你要是不明白就不要在这误导人了,好吧?
还真不明白,误导大众要枪毙,给我判个邢~
是这样的,首先是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,果然也不能正常显示
我觉得一个可能的原因是:你的゛这个字符,我查了unicode是0x309B,而汉字编码区是0x3400-0x9FA5,也就是说这个字符不属于中文字符,它落在日文字符区(0x3041--0x30FF),虽然GBK是有这个字符,但是GB2312似乎没有这个字符,不知道是不是这个原因
textbox1里不是文本路径吗?文件名就是 软件开发找不到“发”.txt ?
我觉得一个可能的原因是:你的゛这个字符,我查了unicode是0x309B,而汉字编码区是0x3400-0x9FA5,也就是说这个字符不属于中文字符,它落在日文字符区(0x3041--0x30FF),虽然GBK是有这个字符,但是GB2312似乎没有这个字符,不知道是不是这个原因
越来越接近问题的核心了。那个字符确实是日文字。
其实我是在做一款免费的QQ群成员聊天排名程序,已经可以统计大部分群的聊天记录了,下载地址:http://pan.baidu.com/share/link?shareid=3837483282&uk=825351447
但是往往遇到一些带日文的非主流昵称会出问题。
估计是 记事本 跟 UE 的底层查找处理方法不一样。
自己写个 查找 方法试试,应该可以查到。
按QQ号统计,不会被统计为两个人。但用邮箱登录QQ的除外。