C# 如何修复编码,我得到的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) {

在我的c#代码中,我从pdf中提取文本,但它返回的文本有一些奇怪的字符,如果我在知道pdf文档中有文本“CLE action”时搜索“CLE action”,它会给我一个false,但我发现在提取文本后,两个单词之间的空格的ascii字节值为63

有没有一种快速的方法来修复文本的编码

目前我正在使用这种方法,但我认为它很慢,只适用于一个字符。有没有适合所有角色的快速方法

    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]", " ");
}