Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:与英语以外的语言一起使用词典的问题_C#_Dictionary - Fatal编程技术网

C#:与英语以外的语言一起使用词典的问题

C#:与英语以外的语言一起使用词典的问题,c#,dictionary,C#,Dictionary,好的,所以我基本上是尝试将每行包含1个单词的.txt文件的内容加载到字典中 当文件中的单词是英语时,我这样做没有问题,但将文件更改为带有口音的语言后,我开始出现问题 在创建流阅读器时必须更改编码,在将单词添加到词典时,也必须更改ToLower方法中的文化 基本上我现在有类似的东西: if (!dict.ContainsKey(word.ToLower(culture))) dict.Add(word.ToLower(culture), true); 问题是像“esta”和“esta”这

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

当文件中的单词是英语时,我这样做没有问题,但将文件更改为带有口音的语言后,我开始出现问题

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

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

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编码都不能识别重音。