C#:使用英文以外的语言字典的问题
好的,所以我基本上试图加载一个.txt文件的内容,每行包含1个单词到字典中。C#:使用英文以外的语言字典的问题
当这个文件中的文字是英文的时候,我没有任何问题,但是把文件改成带重音符的语言,我开始有问题了。
必须在创建流式阅读器时更改编码,同时将该单词添加到字典中,同时还要使用ToLower方法中的文化。
基本上我现在有一些与此类似:
if (!dict.ContainsKey(word.ToLower(culture)))
dict.Add(word.ToLower(culture), true);
的问题是,像“ESTA”和“ESTA”字被认为是相同的。那么,是否有任何方法将ContainsKey方法设置为特定语言,或者我们是否需要按照可比较的方式实现某些内容?无论哪种方式,我有点新的C#所以我会apreciate示例请。
另一个问题淹没在新文件中......在像一百字之后,它停止添加文件的其余部分,留下一个字不完整......但我无法看到该字中的任何特殊字符以结束执行该方法,关于这个问题的任何想法?
非常感谢。
编辑: 第一个问题使用Jon Skeet消解解决。
关于第二个问题: 好吧,将文件格式更改为UTF8,并删除流读取器中的编码,因为它现在可以识别恰好正确的重音。现在测试一些关于第二期的内容。
第二个问题也解决了,这是我的一个错误...耻辱...
Thnks的快速解答大家,尤其是乔恩斯基特。
我假设你试图让字典不区分大小写。不要调用ToLower
,而要使用构造函数Dictionary
,它使用相等比较器 - 并使用StringComparer.Create(culture, true)
来构造合适的比较器。
我不知道你的第二个问题是什么 - 我们需要更多的细节来诊断它,包括你正在使用的代码,理想情况。
编辑:UTF-7几乎肯定是而不是的正确编码。不要只是猜测编码;找出它的真正意义。这个文本文件从哪里来的?你能成功打开它什么?
我怀疑至少有一些问题是由于使用UTF-7造成的。
非常感谢,加入了StringComparer.Create(culture,true)解决了我的第一个问题。 第二个仍然存在,即使用UTF-7,因为UTF-8或ASCII编码都不能识别该重音。 – brokencoding 2010-01-06 12:20:00
问题在于打开文件时要使用的引用。看起来你可能正在使用ASCIIEncoding。
.NET在内部将字符串处理为UTF-8,所以这种问题不会发生在内部。
如果您在比较时遇到问题,那么在字典中,您将遇到散列码生成器的问题,这意味着两个不同的字符串将具有相同的散列码。我不知道这是否肯定会证明是一个问题,但我希望你会发现访问字典会证明是有问题的。为什么你使用字典作为存储有什么特别的原因?也许一个自定义的数据结构会更有意义。 – 2010-01-06 12:09:52