C#:使用除英语之外的语言的字典的问题

时间:2010-01-06 12:01:44

标签: c# dictionary

好的,所以我基本上试图将每行包含1个单词的.txt文件的内容加载到字典中。

当该文件中的单词是英文时,我没有遇到任何问题,但是将文件更改为带有重音的语言,我开始遇到问题。

在创建流阅读器时,还必须更改编码,在将单词添加到词典时,也要在ToLower方法中更改文化。

基本上我现在有类似的东西:

if (!dict.ContainsKey(word.ToLower(culture)))
    dict.Add(word.ToLower(culture), true);

问题是像“esta”和“está”这样的词被认为是相同的。那么,有没有办法将ContainsKey方法设置为特定语言,还是我们需要在类似的行中实现某些东西?无论哪种方式,我都是c#的新手,所以我想请一个例子。

另一个问题淹没了新文件......在一百个单词后,它停止添加文件的其余部分,留下一个字不完整......但是我无法看到该字中的任何特殊字符以结束执行方法,关于这个问题的任何想法?

非常感谢。

编辑: 使用Jon Skeet sugestion解决了第一个问题。

关于第二个问题: 好的,将文件格式更改为UTF8并删除了流阅读器中的编码,因为它现在可以正确识别重音符号。现在就第二个问题测试一些东西。

第二个问题也解决了,这是我的一个错误......耻辱......

快速回答所有人,特别是Jon Skeet。

2 个答案:

答案 0 :(得分:7)

我假设你试图让词典不区分大小写。不要调用ToLower,而是使用Dictionary的构造函数,它使用相等比较器 - 并使用StringComparer.Create(culture, true)构造一个合适的比较器。

我不知道你的第二个问题是什么 - 我们需要更多细节来诊断它,包括你正在使用的代码,理想情况。

编辑:UTF-7几乎肯定正确的编码。不要只是猜测编码;找出它真正意义上的东西。这个文本文件来自哪里?你能成功打开什么?

我怀疑至少你的一些问题是由于使用UTF-7。

答案 1 :(得分:1)

问题在于打开要读取的文件时使用的enconding。看起来您可能正在使用ASCIIEncoding。

.NET在内部处理字符串为UTF-8,因此这种问题不会在内部发生。