C#:与英语以外的语言一起使用词典的问题
好的,所以我基本上是尝试将每行包含1个单词的.txt文件的内容加载到字典中 当文件中的单词是英语时,我这样做没有问题,但将文件更改为带有口音的语言后,我开始出现问题 在创建流阅读器时必须更改编码,在将单词添加到词典时,也必须更改ToLower方法中的文化 基本上我现在有类似的东西:C#:与英语以外的语言一起使用词典的问题,c#,dictionary,C#,Dictionary,好的,所以我基本上是尝试将每行包含1个单词的.txt文件的内容加载到字典中 当文件中的单词是英语时,我这样做没有问题,但将文件更改为带有口音的语言后,我开始出现问题 在创建流阅读器时必须更改编码,在将单词添加到词典时,也必须更改ToLower方法中的文化 基本上我现在有类似的东西: if (!dict.ContainsKey(word.ToLower(culture))) dict.Add(word.ToLower(culture), true); 问题是像“esta”和“esta”这
if (!dict.ContainsKey(word.ToLower(culture)))
dict.Add(word.ToLower(culture), true);
问题是像“esta”和“esta”这样的词被认为是相同的。那么,有没有办法将ContainsKey方法设置为一种特定的语言,或者我们需要实现类似的语言?不管怎样,我对c有点陌生,所以请举个例子
另一个问题与新文件一起被淹没。。。在大约一百个单词之后,它停止添加文件的其余部分,留下一个单词不完整。。。但是我看不到这个词中有什么特殊的字符来结束这个方法的执行,关于这个问题有什么想法吗
非常感谢
编辑:
使用Jon Skeet sugestion解决的第一个问题
关于第二个问题:
好的,将文件格式更改为UTF8,并删除流读取器中的编码,因为它现在可以正确识别重音。现在测试一些关于第二个问题的东西
第二个问题也解决了,这是我的一个错误。。。羞耻
谢谢大家的快速回答,尤其是Jon Skeet。问题在于打开文件阅读时使用的编码。看起来你可能正在使用密码
.NET以UTF-8的形式在内部处理字符串,因此这种问题不会在内部发生。我假设您正在尝试获取字典的大小写不敏感。不要调用
ToLower
,而是使用Dictionary
的构造函数,该构造函数接受一个相等比较器,并使用StringComparer.Create(culture,true)
来构造一个合适的比较器
我不知道你的第二个问题是关于什么的-我们需要更多的细节来诊断它,最好包括你正在使用的代码
编辑:UTF-7几乎肯定不是正确的编码。不要只是猜测编码;找出它真正的意义。这个文本文件来自哪里?您可以在什么位置成功打开它
我怀疑您的一些问题至少是由于使用UTF-7造成的。我想知道在您尝试序列化/反序列化字符串/字符数据之前,是否有编码。net在内部处理字符串的方式应该不受这种编码限制,开发人员也不必担心。@spender:读取文本文件就是反序列化字符数据。用于此操作的编码必须正确,否则数据将被损坏。@Jon:我没有明确说明这是我所评论的答案的第二段。@Oded:我非常确定
string
在内部使用UTF-16编码。如果您在比较中遇到问题,那么在字典中,哈希代码生成器将出现问题,这意味着两个不同的字符串将具有相同的哈希代码。我不知道这是否一定会成为一个问题,但我希望你会发现,访问字典会成为一个问题。您使用字典存储有什么特别的原因吗?也许自定义数据结构更有意义。非常感谢,添加StringComparer.Create(culture,true)解决了我的第一个问题。第二个仍然存在,我使用UTF-7,因为UTF-8或ASCII编码都不能识别重音。