C# 如何修复编码,我得到的ascii值为63,而它应该是规则的空格
在我的c#代码中,我从pdf中提取文本,但它返回的文本有一些奇怪的字符,如果我在知道pdf文档中有文本“CLE action”时搜索“CLE action”,它会给我一个false,但我发现在提取文本后,两个单词之间的空格的ascii字节值为63 有没有一种快速的方法来修复文本的编码 目前我正在使用这种方法,但我认为它很慢,只适用于一个字符。有没有适合所有角色的快速方法C# 如何修复编码,我得到的ascii值为63,而它应该是规则的空格,c#,encoding,C#,Encoding,在我的c#代码中,我从pdf中提取文本,但它返回的文本有一些奇怪的字符,如果我在知道pdf文档中有文本“CLE action”时搜索“CLE action”,它会给我一个false,但我发现在提取文本后,两个单词之间的空格的ascii字节值为63 有没有一种快速的方法来修复文本的编码 目前我正在使用这种方法,但我认为它很慢,只适用于一个字符。有没有适合所有角色的快速方法 public static string fix_encoding(string src) {
public static string fix_encoding(string src)
{
StringWriter return_str = new StringWriter();
byte[] byte_array = Encoding.ASCII.GetBytes(src.Substring(0, src.Length));
int len = byte_array.Length;
byte byt;
for(var i=0; i<len; i+=1)
{
byt = byte_array[i];
if (byt == 63)
{
return_str.Write(" ");
}
else
{
return_str.Write(Encoding.ASCII.GetString(byte_array, i, 1));
}
}
return return_str.ToString();
}
从pdf文件中提取的空间可能不是实空间(“”),而是unicode中定义的其他类型的空间。例如,“em空间”或“非中断空间”,请参阅或以获取概述 如果提取的文本包含这样一个空格,并且您在文本中搜索普通空格,您将找不到它,因为它不完全相同 您的fix_编码函数。ASCII中并不存在所有不寻常的空格。默认情况下,非ASCII字符为。因此,在fix_编码函数中,您会看到一个问号,即使原始文本具有不同的字符 这意味着在fix_编码函数中,不应转换为ASCII,而应将不寻常的空格替换为普通空格。下面的函数将转换所有非ASCII字符,但您也可以使用来确定用普通空格替换哪些字符
public static string remove_non_ascii(string src)
{
return Regex.Replace(src, @"[^\u0000-\u007F]", " ");
}
src
到底从哪里来?如果您意外地得到一个?
(这就是ASCII 63),那可能是因为您一开始使用了错误的编码。您需要回到实际解码PDF的位置,然后使用正确的编码对其进行解码。@Jon Skeet,我使用iTextSharp方法从页面获取文本。(见上图)@omega:你为什么要用StringWriter
呢?为什么不干脆currentText=pdftextractor.GetTextFromPage(reader,page,new SimpleTextractionStrategy())
?
public static string remove_non_ascii(string src)
{
return Regex.Replace(src, @"[^\u0000-\u007F]", " ");
}