C# / Python 编码差异
C# / Python Encoding difference
基本上我正在将 PDF 转换为文本,然后使用 Python 中的库分析和剪辑该文本的部分内容。 Python "clipping" 实际上并没有将文本切割成单独的文件,它只是具有用于字符串提取的起始字符和结束字符位置。例如:
the quick brown fox jumped over the lazy dog
我的 python 代码可能会通过指定 4 和 9 删除 "quick"。然后我将 C# 用于 GUI 程序并尝试采用 Python 分配的这些值,并且它有效……在大多数情况下。将 pdf 转换为文本文件的光学字符识别程序似乎包含一些奇怪的 UTF 字符,这将改变 C# 端的计数。
PDF-txt 转换奇数字符包含一个“fi”字符,而不是 "f" 和 "i" 字符(可能还有其他字符,它们是大文件。)现在这会' 是个问题,除了 C# 说这是一个字符并且 Python(以及 Notepad++)考虑这 3 个字符位置。
C#:“fi”长度 = 1 个字符。
Python/Notepad++: "fi" 长度 = 3 个字符。
由于字符数的不同,这最终给了我一个偏移剪辑。就像我说的,当我 运行 它在 python (linux) 并尝试输出完美的剪辑,然后我将文本文件传输到 Windows 并且 Notepad++ 确认它们是正确的位置。 C# 实际上只是将“fi”计为一个字符,Notepad++ 以及 Python 出于某种原因将其计为 3 个字符。
我需要一种方法来弥合 Python 端或 C# 端的这种差异。
你必须区分字符和字节。 utf8 是一种字符编码,其中一个字符最多可以有 4 个字节。所以 notepad++ 可能显示字节位置,其中 Python 可以同时处理字节和字符串。在 C# 中可能已经将文件读取为文本文件,它也会生成字符串。
要读取 python 中的字符串,请使用:
import codecs
with codecs.open(filename, encoding="utf-8") as inp:
text = inp.read()
基本上我正在将 PDF 转换为文本,然后使用 Python 中的库分析和剪辑该文本的部分内容。 Python "clipping" 实际上并没有将文本切割成单独的文件,它只是具有用于字符串提取的起始字符和结束字符位置。例如:
the quick brown fox jumped over the lazy dog
我的 python 代码可能会通过指定 4 和 9 删除 "quick"。然后我将 C# 用于 GUI 程序并尝试采用 Python 分配的这些值,并且它有效……在大多数情况下。将 pdf 转换为文本文件的光学字符识别程序似乎包含一些奇怪的 UTF 字符,这将改变 C# 端的计数。
PDF-txt 转换奇数字符包含一个“fi”字符,而不是 "f" 和 "i" 字符(可能还有其他字符,它们是大文件。)现在这会' 是个问题,除了 C# 说这是一个字符并且 Python(以及 Notepad++)考虑这 3 个字符位置。
C#:“fi”长度 = 1 个字符。
Python/Notepad++: "fi" 长度 = 3 个字符。
由于字符数的不同,这最终给了我一个偏移剪辑。就像我说的,当我 运行 它在 python (linux) 并尝试输出完美的剪辑,然后我将文本文件传输到 Windows 并且 Notepad++ 确认它们是正确的位置。 C# 实际上只是将“fi”计为一个字符,Notepad++ 以及 Python 出于某种原因将其计为 3 个字符。
我需要一种方法来弥合 Python 端或 C# 端的这种差异。
你必须区分字符和字节。 utf8 是一种字符编码,其中一个字符最多可以有 4 个字节。所以 notepad++ 可能显示字节位置,其中 Python 可以同时处理字节和字符串。在 C# 中可能已经将文件读取为文本文件,它也会生成字符串。
要读取 python 中的字符串,请使用:
import codecs
with codecs.open(filename, encoding="utf-8") as inp:
text = inp.read()