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的快速解答大家,尤其是乔恩斯基特。

+0

如果您在比较时遇到问题,那么在字典中,您将遇到散列码生成器的问题,这意味着两个不同的字符串将具有相同的散列码。我不知道这是否肯定会证明是一个问题,但我希望你会发现访问字典会证明是有问题的。为什么你使用字典作为存储有什么特别的原因?也许一个自定义的数据结构会更有意义。 – 2010-01-06 12:09:52

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

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

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

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

+0

非常感谢,加入了StringComparer.Create(culture,true)解决了我的第一个问题。 第二个仍然存在,即使用UTF-7,因为UTF-8或ASCII编码都不能识别该重音。 – brokencoding 2010-01-06 12:20:00

问题在于打开文件时要使用的引用。看起来你可能正在使用ASCIIEncoding。

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

+0

我不知道是否编码进入它,直到你尝试序列化/反序列化字符串/字符数据。 .net如何在内部处理字符串应该没有这种编码问题,并且不受开发人员的关注。 – spender 2010-01-06 12:09:35

+1

@spender:读取文本文件*是*反序列化字符数据。用于此的编码必须正确,否则数据将被损坏。 – 2010-01-06 12:26:44

+0

@Jon:我没有说清楚这是我评论这个答案的第二段。 – spender 2010-01-06 12:33:37