Làm cách nào để chuyển đổi các thực thể html thành văn bản có thể đọc được?


9

Tôi muốn các thực thể số html như & # x119; và muốn chuyển đổi nó thành nhân vật thực sự. Tôi có email chủ yếu từ Linkedin trông như thế này:

chcia & # x142; abym zaccata & # x107;, czy rozwa & # x17c; a Pan takze udzia & # x142; w nowych projektach w Warszawie? Obecnie poszukujemy specjalisty javascript / architekta z bardzo dobr & # x105; znajomo & # x15b; ci & # x105; Angular.js làm projektu, kt & # xf3; ry dotyczy systemu, s & # x142; u & # x17c; & # x105; cego do Monitorowania i zarz & # x105; dzania flot & # x105; pojazd & # xf3; w. Zesp & # xf3; & # x142;, làm kt & # xf3; rego poszukujemy

Tôi đang sử dụng clawsmail, chuyển sang html không chuyển đổi nó thành văn bản, tôi đã thử sao chép và sử dụng

xclip -o -sel clip | html2text | less

nhưng nó đã không chuyển đổi các thực thể. Có cách nào để văn bản đó sử dụng các công cụ dòng lệnh không?

Cách duy nhất tôi có thể nghĩ đến là sử dụng data:text/html,<PASTE THE EMAIL>và mở nó trong trình duyệt, nhưng thích dòng lệnh hơn.

Câu trả lời:


20

Với Free recode(trước đây gọi là GNU recode):

recode html < file

Nếu bạn không có recodehoặc HTML::Entitieschỉ cần giải mã &#x<hex>;các thực thể, bạn có thể thực hiện bằng tay với:

perl -Mopen=locale -pe 's/&#x([\da-f]+);/chr hex $1/gie'

công việc này hoàn hảoc-v | html2text | recode html
jcubic

Không có html2text; không chắc nó quan trọng Ví dụ này thất bại với recode: Request 'html' is erroneous. Có vẻ như nó cần được chạy theo cách này ngay bây giờ với một phạm vi thay vì một định danh duy nhất : recode html..utf-8. Hơi lạ một chút, nhưng tôi đoán đó là tất cả các mã dịch tương tự ở một số cấp độ.
Pysis

@Pysis, bạn sẽ nhận thấy phiên bản đầu tiên của câu trả lời này html..sau đó đã đổi thành htmlnăm 2014. htmlmột mình chắc chắn hoạt động với phiên bản mới nhất (git head từ tháng 12 năm 2019) hoặc từ 3.6 từ năm 2008. Bạn có thể có phiên bản rất cũ không?
Stéphane Chazelas

Chỉ cần cài đặt để sử dụng trong cygwin, tôi nghĩ đó là từ Choco? recode 3.7-beta2
Pysis

Với recode 3.7-beta2, lệnh hiện đang hoạt động recode HTML..utf-8.
Diomidis Spinellis

4

Từ Làm cách nào tôi có thể giải mã các thực thể HTML? trên StackOverflow, bạn có thể thực hiện một giải pháp perl đơn giản như

perl -Mopen=locale -MHTML::Entities -pe '$_ = decode_entities($_)' email.txt

ví dụ: sử dụng văn bản mẫu của bạn

$ perl -Mopen=locale -MHTML::Entities -pe '$_ = decode_entities($_)' email.txt
chciałabym zapytać, czy rozważa Pan takze udział w nowych projektach w Warszawie ? Obecnie poszukujemy specjalisty javascript/architekta z bardzo dobrą znajomością Angular.js do projektu, który dotyczy systemu, służącego do monitorowania i zarządzania flotą pojazdów. Zespół, do którego poszukujemy

Với -Mopen=locale, I / O được thực hiện trong bộ ký tự của miền địa phương. Điều đó bao gồm đầu vào từ email.txt. Dường như email.txtchỉ chứa các ký tự ASCII (toàn bộ điểm mã hóa các ký tự đó bằng cách sử dụng &#x<hex>;ký hiệu mà tôi cho là), nhưng nếu không, bạn có thể cần phải điều chỉnh phần trên để giải mã tệp đó bằng cách sử dụng bộ ký tự bên phải (nếu nó không giống với miền địa phương một) thay vì sử dụng open=locale.


2
Bạn nên sử dụng -Mopen=localetùy chọn để văn bản được xuất ra trong bộ ký tự của người dùng (và làm cho cảnh báo đó biến mất).
Stéphane Chazelas

3

Một phiên bản python 3.2+, có thể được sử dụng trong một đường ống:

python3 -c 'import html, sys; [print(html.unescape(l), end="") for l in sys.stdin]' < file

Cleaner:python3 -c'import html,sys;print(html.unescape(sys.stdin.read()), end="")'
ariddell 27/03/18

@ariddell: phiên bản của bạn không phải là từng dòng một và tôi muốn duy trì ranh giới của dòng; mặt khác, nó chặn một đường ống cho đến khi mọi thứ được đọc trên stdin (đường ống đã cạn kiệt).
Aissen

-1

echo -e "\x01\x19" nên làm thủ thuật.


để lấy phiếu, có lẽ bạn nên viết mã shell sẽ chuyển đổi &#x119;thành echo -e "\x01\x19"có thể với sed.
jcubic

Ngoài ra, điều này không hoạt động vì đó là một nhân vật và tôi không nhận được nó khi tôi chạy lệnh của bạn.
jcubic

\ u119 hoạt động, nhưng tôi không thể làm cho nó hoạt động với sed. Cho đến nay tôi cóc-v | sed -e 's/&#x\([^;]*\);/\\u\1/g' -e 's/.*/echo -e "&"/' | bash
jcubic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.