0

私のC#コードでは、pdfからテキストを抽出していますが、返されるテキストには奇妙な文字が含まれています.pdfドキュメントに「CLEアクション」というテキストがあることがわかっているときに「CLEアクション」を検索すると、私は間違っていますが、テキストを抽出した後、2つの単語の間のスペースのASCIIバイト値が63であることがわかりました...

テキストのエンコーディングを修正する簡単な方法はありますか?

現在、私はこの方法を使用していますが、遅いし、その 1 つのキャラクターに対してしか機能しないと思います。すべてのキャラクターで機能する高速な方法はありますか?

    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();
    }

これが私がこのメソッドを呼び出す方法です:

                StringWriter output = new StringWriter();
                output.WriteLine(PdfTextExtractor.GetTextFromPage(reader, page, new SimpleTextExtractionStrategy()));
                currentText = fix_encoding(output.ToString());
4

1 に答える 1

2

PDFファイルから抽出したスペースは、実際のスペース( "")ではなく、Unicodeで定義された他の種類のスペースである可能性があります。たとえば、「emスペース」または「ノンブレークスペース」。概要については、このリストまたはここを参照してください。

抽出されたテキストにそのようなスペースが含まれている場合、テキストで通常のスペースを検索すると、同一ではないため、そのスペースは見つかりません。

fix_encoding関数は、文字列をASCIIに変換します。珍しい種類のスペースのすべてがASCIIに存在するわけではありません。デフォルトでは、非ASCII文字は疑問符に変換されます。したがって、fix_encoding関数では、元のテキストの文字が異なっていても、疑問符が表示されます。

つまり、fix_encoding関数では、ASCIIに変換するのではなく、通常とは異なるスペースを通常のスペースに置き換えてください。次の関数はすべての非ASCII文字を変換しますが、Char.IsWhiteSpaceを使用して、通常のスペースに置き換える文字を決定することもできます。

public static string remove_non_ascii(string src)
{
    return Regex.Replace(src, @"[^\u0000-\u007F]", " ");
}
于 2012-12-20T20:47:39.233 に答える