C# 搜索模式C的字节[]#

C# 搜索模式C的字节[]#,c#,winforms,search,bytearray,C#,Winforms,Search,Bytearray,\u documentContent将整个文档作为html视图源代码包含。 patternToFind包含要在\u documentContent中搜索的文本 如果语言是英语,下面的代码片段可以正常工作。 但是,当遇到像韩语这样的语言时,同样的代码根本不起作用 样本文件 现在时态 现在时态与你所学的一样。如果采用动词的字典形式,则删除다, 添加适当的结尾 먹다 - 먹 + 어요 = 먹어요 마시다 - 마시 + 어요 - 마시어요 - 마셔요. 这个时态用来表示现在发生的事情。我吃。我喝酒。

\u documentContent
将整个文档作为html视图源代码包含。
patternToFind
包含要在
\u documentContent
中搜索的文本

如果语言是英语,下面的代码片段可以正常工作。 但是,当遇到像韩语这样的语言时,同样的代码根本不起作用

样本文件 现在时态

现在时态与你所学的一样。如果采用动词的字典形式,则删除다, 添加适当的结尾

먹다 - 먹 + 어요 = 먹어요
마시다 - 마시 + 어요 - 마시어요 - 마셔요.

这个时态用来表示现在发生的事情。我吃。我喝酒。这是目前的通用术语

当我试图找到먹 下面的代码失败

有人能提出一些解决办法吗

using System;
using System.Collections.Generic;
using System.Text;

namespace MultiByteStringHandling
{
    class Program
    {
        static void Main(string[] args)
        {
            string _documentContent = @"먹다 - 먹 + 어요 = 먹어요";
            byte[] patternToFind = Encoding.UTF8.GetBytes("먹");
            byte[] DocumentBytes = Encoding.UTF8.GetBytes(_documentContent);

            int intByteOffset = indexOf(DocumentBytes, patternToFind);
            Console.WriteLine(intByteOffset.ToString());
        }
        public int indexOf(byte[] data, byte[] pattern)
        {
            int[] failure = computeFailure(pattern);

            int j = 0;
            if (data.Length == 0) return 0;

            for (int i = 0; i < data.Length; i++)
            {
                while (j > 0 && pattern[j] != data[i])
                {
                    j = failure[j - 1];
                }
                if (pattern[j] == data[i])
                {
                    j++;
                }
                if (j == pattern.Length)
                {
                    return i - pattern.Length + 1;
                }
            }
            return -1;
        }
        /**
         * Computes the failure function using a boot-strapping process,
         * where the pattern is matched against itself.
         */
        private int[] computeFailure(byte[] pattern)
        {
            int[] failure = new int[pattern.Length];

            int j = 0;
            for (int i = 1; i < pattern.Length; i++)
            {
                while (j > 0 && pattern[j] != pattern[i])
                {
                    j = failure[j - 1];
                }
                if (pattern[j] == pattern[i])
                {
                    j++;
                }
                failure[i] = j;
            }

            return failure;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统文本;
命名空间MultiByteStringHandling
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串_documentContent=@”먹다 - 먹 + 어요 = 먹어요";
byte[]patternToFind=Encoding.UTF8.GetBytes(“먹");
byte[]DocumentBytes=Encoding.UTF8.GetBytes(\u documentContent);
int intByteOffset=indexOf(DocumentBytes,patternToFind);
Console.WriteLine(intByteOffset.ToString());
}
public int indexOf(字节[]数据,字节[]模式)
{
int[]故障=计算故障(模式);
int j=0;
如果(data.Length==0)返回0;
for(int i=0;i0&&pattern[j]!=data[i])
{
j=故障[j-1];
}
if(模式[j]==数据[i])
{
j++;
}
if(j==模式长度)
{
返回i-模式。长度+1;
}
}
返回-1;
}
/**
*使用引导过程计算故障函数,
*模式与自身相匹配。
*/
私有int[]计算失败(字节[]模式)
{
int[]失败=新的int[pattern.Length];
int j=0;
for(int i=1;i0&&pattern[j]!=pattern[i])
{
j=故障[j-1];
}
if(模式[j]==模式[i])
{
j++;
}
失效[i]=j;
}
返回失败;
}
}
}

说真的,为什么不做下面的事情呢

var indexFound = documentContent.IndexOf("data");

当原始数据是文本时,将字符串转换为字节数组,然后搜索这些数组对我来说没有多大意义。如果您愿意,您总是可以在后面找到字节位置。

说真的,为什么不做以下操作呢

var indexFound = documentContent.IndexOf("data");

当原始数据是文本时,将字符串转换为字节数组,然后搜索这些数组对我来说没有多大意义。如果愿意,您可以始终在后面找到字节位置。

是一种可变的多字节格式。在韩文数据中搜索英文文本永远不会与直接模式匹配匹配。如果您正在扫描文本,您将e最好使用.IndexOf(pattern)[如指出]或.Contains(pattern)。

是一种可变的多字节格式。在韩文数据中搜索英文文本永远不会与直接模式匹配。如果您正在扫描文本,最好使用.IndexOf(pattern)[如指出]或.Contains(pattern).

请使用失败的示例文档/模式更新代码。我将进行编辑以从问题中删除对WinForms的引用,因为它显然与WinForms本身没有任何关系。您能在字节[]中看到字节[]模式吗当您处理带有韩语字符的内容时,手动输入数据?输入文件真的是UTF-8还是ANSI代码页或类似文件?您是否有任何特殊原因希望将字符串转换为字节数组,而不仅仅是执行
\u documentContent.IndexOf(“数据”)
?我有一个韩文文档,我需要在文档中搜索韩文文本。该文档确实包含英文的某些部分。这就是我尝试使用字节数组执行此操作的原因。.NET中的字符串在内存中是unicode,因此它应该能够搜索韩文文本。是否尝试使用.IndexOf?请使用以下命令更新代码:h一个失败的示例文档/模式。我将进行编辑以从问题中删除对WinForms的引用,因为它显然与WinForms本身没有任何关系。您能在byte[]中看到byte[]模式吗当您处理带有韩语字符的内容时,手动输入数据?输入文件真的是UTF-8还是ANSI代码页或类似文件?您是否有任何特殊原因希望将字符串转换为字节数组,而不仅仅是执行
\u documentContent.IndexOf(“数据”)
?我有一个韩文文档,我需要在文档中搜索韩文文本。该文档确实包含英文的某些部分。这就是为什么我尝试使用字节数组来执行此操作。NET中的字符串在内存中是unicode,因此它应该能够搜索韩文文本。是否尝试使用.IndexOf?