Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字符串。替换来自ItextSharp的数据_C#_Pdf_Character Encoding_Itextsharp_Itext - Fatal编程技术网

C# 字符串。替换来自ItextSharp的数据

C# 字符串。替换来自ItextSharp的数据,c#,pdf,character-encoding,itextsharp,itext,C#,Pdf,Character Encoding,Itextsharp,Itext,我正在使用ItextSharp从pdf中读取数据。检查结果字符串看起来是正确的,但是string.Replace无法替换文本 因此,我猜这是某种编码问题,但我没能确定下来 从PDF导入文本的代码应转换为UTF8 PdfReader pdfReader = new PdfReader("file.pdf"); for (int page = 1; page <= pdfReader.NumberOfPages; page++)

我正在使用ItextSharp从pdf中读取数据。检查结果字符串看起来是正确的,但是string.Replace无法替换文本

因此,我猜这是某种编码问题,但我没能确定下来

从PDF导入文本的代码应转换为UTF8

 PdfReader pdfReader = new PdfReader("file.pdf");

                for (int page = 1; page <= pdfReader.NumberOfPages; page++)
                {
                    ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                    string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);

                    currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
                    text.AppendLine(currentText);
                }
                pdfReader.Close();
从PDF导入中删除utf8转换不会产生任何影响,请参见下面的屏幕截图-替换函数后的断点,但文本仍然存在:

编辑:

这里是一个链接到一个。当在记事本或++中打开时,它会显示一系列空格和连字符。请参见带有空格渲染的npp屏幕截图。但是,在c中读取此文件时,不会将其解释为unicode连字符和unicode空格。

事实证明,无论是ITextSharp还是源PDF都使用了一种称为软hypen的东西来表示标准hypen,因此,尽管记事本、记事本++和Visual studio文本可视化程序都将软hypen呈现为标准hypen,但它们不是相同的字符,这就是为什么String.Replace不执行任何替换

根据我对软连字符的理解,通常不应渲染,这会导致在尝试将字符粘贴到web浏览器或其他程序(如charmap,甚至visual studio本身)时出现奇怪的行为

这导致了以下工作代码:

input = input.Replace("­­ ­", "---");
在Firefox上,这表现为用三个连字符替换一个空格,然而粘贴到记事本上显示了我的真实意图

input = input.Replace("-- -", "---");
软连字符:

连字符标准连字符

我的解决方案是添加以下行:

        input = input.Replace((char)173, '-');
tl;博士:
字符编码非常好,并非所有连字符都相等。

请参阅为什么要删除整行currentText=encoding.UTF8.getStringAscienceODing.Convert。。。。该行总是,总是错误的,充其量什么也不做,最坏的情况下会破坏数据。谢谢,但我的String.Replace仍然失败。请参阅编辑,我上传了一个示例txt文件,演示了该问题。
        input = input.Replace((char)173, '-');