【问题标题】:Reading keywords from a file and searching for them without results从文件中读取关键字并在没有结果的情况下搜索它们
【发布时间】:2013-08-18 16:36:24
【问题描述】:

我使用这段 C# 代码来读取keywords.txt。我在其中存储了 4-5 种语言(希腊语、瑞典语、土耳其语等)的一些关键字和短语

StreamReader sr = new StreamReader("keywords.txt", System.Text.Encoding.Unicode);
ArrayList keywords = new ArrayList();
while (!sr.EndOfStream)
{
    keywords.Add(sr.ReadLine());
}
sr.Close();

后来我用这个

string comment = getText(rev, "comment="", """, out rev);
if (comment.Contains(keywords[i].ToString()))
{
    blah blah blah
}

它可以读取英文单词,但不能读取希腊语、带有特殊字符的土耳其语等。我使用了默认编码 UTF8 无结果..我已将 streamread 的编码更改为 unicode 无结果.. 你有什么想法? 谢谢:D

更新:我发现问题出在 getText 获取评论时,而不是当我将关键字与评论进行比较时。我将 cmets 保存到文件中

string comment = getText(rev, "comment="", """, out rev);
                using (System.IO.StreamWriter file = new System.IO.StreamWriter("WriteText.txt", true))
    {
        file.WriteLine(comment);
    }

我得到了这种符号而不是希腊字母

ΑναίΟεση έκδοσης 4232870 Ξ±Ο€Ο Ο„ΞΏΞ½ 

通过小型研究和测试,我发现这是相同的希腊内容,其编码设置为 Windows 1253。有没有办法控制 getText 使用的编码?

【问题讨论】:

  • 哪个部分不工作?
  • 它开始起作用了! The Turkish Problem
  • 尽管我正在搜索的关键字存在,但程序似乎无法理解它......不仅是土耳其语,还有希腊语,法语,捷克语,匈牙利语等等。如果有一个特殊字符(αβω、ί、á、í、ř、ğ、ş)在英语中不存在,那么我们就有问题了......
  • 是否可以销毁getText中的rev。奇怪的用法:getText(rev, ... , ... , out rev);
  • 这种方式可以很好地处理英文单词...你有什么特别的想法吗?

标签: c# encoding character streamreader


【解决方案1】:

如果您的问题是因为关键字和评论是相似的字符串但不相等(大写/小写,文化特定词),您必须使用另一个版本的比较:

http://msdn.microsoft.com/es-es/library/cc190529.aspx

public static int Compare(
    string strA,
    int indexA,
    string strB,
    int indexB,
    int length,
    CultureInfo culture,
    CompareOptions options

最后一个参数 CompareOptions 类似于:IgnoreSymbols |忽略大小写 |忽略非空格

【讨论】:

  • 关键字和注释看起来完全一样...但我认为它们的编码有所不同,这就是为什么我的程序无法将它们识别为相同的原因..我正在测试希腊语单词甚至字符(让我们说“α”)并没有找到任何尽管有很多完全相同的事实..
  • c# getText 不是 c# 标准函数(至少,我不知道这条指令)。你能把这个函数的代码放上来吗?并将 System.Text.Encoding.Unicode 更改为 UTF8!
  • 编码只是将信息保存到磁盘或从磁盘检索(必须以相同的编码写入和读取!),在内存中,在ac#字符串中,信息存储在相同的编码(我认为是UTF8)。我认为问题在于比较。你用过我给你的比较版本吗?
  • 我找到了一个蹩脚的解决方案.. 我发现我的程序如何读取希腊语单词(类似于 Ξ'Ξ½Ξ±Ξ―Οεση),我用这种词来比较.. 和它起作用了..它很蹩脚,你必须看看它是如何用这种奇怪的编码编写的,但是它起作用了..谢谢大家..
  • 我认为那是gettext...请您提供命名空间或实现是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多