簡體   English   中英

Python:特殊字符給我帶來問題(來自PDFminer)

[英]Python: special characters giving me problems (from PDFminer)

我使用PDFminer的pdf2text將PDF縮減為文本。 不幸的是它包含特殊字符。 讓我顯示我的控制台的輸出

>>>a=pdf_to_text("ap.pdf")

下面是一個樣本,有點截斷

>>>a[5000:5500]
'f one architect. Decades ...... but to re\xef\xac\x82ect\none set of design ideas, than to have one that contains many\ngood but independent and uncoordinated ideas.\n1 Joshua Bloch, \xe2\x80\x9cHow to Design a Good API and Why It Matters\xe2\x80\x9d, G......=-3733'

我明白我必須編碼

>>>a[5000:5500].encode('utf-8')
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 237: ordinal not in range(128)

我搜索了一下並嘗試了它們,特別是在python中替換特殊字符 輸入來自PDFminer,所以它很難控制(AFAIK)。 從這個輸出中制作正確明文的方法是什么?

我究竟做錯了什么?

- 快速修復:將PDFminer的編解碼器更改為ascii-但這不是一個持久的解決方案 -

- 為解決方案安排快速修復 - 更改編解碼器刪除信息 -

- Maxim提到的一個相關話題http://en.wikipedia.org/wiki/Windows-1251 -

當非ASCII文本存儲在str對象中時,通常會發生此問題。 你要做的是在utf-8編碼一個已經用某種編碼編碼的字符串(因為它包含代碼高於0x7f )。

要在utf-8對這樣的字符串進行編碼,必須先對其進行解碼。 假設原始文本編碼是cp1251 (用你的實際編碼替換它),類似下面的內容就可以了:

u = s.decode('cp1251')  # decode from cp1251 byte (str) string to unicode string
s = u.encode('utf-8')   # re-encode unicode string to  utf-8 byte (str) string

基本上,上面的代碼段執行了iconv --from-code=CP1251 --to-code=UTF-8命令,即它將字符串從一種編碼轉換為另一種編碼。

一些有用的鏈接:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM