簡體   English   中英

Perl,html數據和以utf-8編碼的字符

[英]Perl , html data and characters encoded in utf-8

Perl的初學者。

我制作了一個解析html網站數據的Perl腳本。 我的腳本以UTF-8編碼數據,其中一個數據包含羅馬尼亞字符,因此對數據進行編碼會導致錯誤的字符,例如:

ţ = þ (incorrect); ş = º (incorrect); ă = ã (correct);

從html解析的行示例:

Distribuţia: Robert Downey Jr. (Sherlock Holmes) Jude Law (Dr. John Watson) Rachel McAdams (Irene Adler) Mark Strong (Lord Blackwood) Kelly Reilly (Mary Morstan) Eddie Marsan (Inspectorul Lestrade) James Fox (Sir Thomas)

我想把它分開:

my ($credits, $line)
foreach $credits (split /(?=\w+:)\s*/, $line) {
...

但是輸出,因為“þ”被解釋為“非單詞字符”(這里的行不正確)是:

Distribuþ
Robert Downey Jr. (Sherlock Holmes)
Jude Law (Dr. John Watson)
Rachel McAdams (Irene Adler)
Mark Strong (Lord Blackwood)
Kelly Reilly (Mary Morstan)
Eddie Marsan (Inspectorul Lestrade)
James Fox (Sir Thomas)

想要輸出(正確):

Distribuţia
Robert Downey Jr. (Sherlock Holmes)
Jude Law (Dr. John Watson)
Rachel McAdams (Irene Adler)
Mark Strong (Lord Blackwood)
Kelly Reilly (Mary Morstan)
Eddie Marsan (Inspectorul Lestrade)
James Fox (Sir Thomas)

如果我使用“\\ p {Alpha}”變量而不是“\\ w”,部分解決問題(換行正確,但顯示“ Distribuþia ”而不是“ Distribuţia ”,可能與其他角色一起發生)看起來像這樣(不正確):

Distribuþia
Robert Downey Jr. (Sherlock Holmes)
Jude Law (Dr. John Watson)
Rachel McAdams (Irene Adler)
Mark Strong (Lord Blackwood)
Kelly Reilly (Mary Morstan)
Eddie Marsan (Inspectorul Lestrade)
James Fox (Sir Thomas)

文字:: Unidecode

>perl -MText::Unidecode -E"say unidecode qq{rom\x{00E2}n\x{0103}}"
romana

只需將所有內容保存在utf-8中即可。

如果您希望在計算機上正確顯示羅馬尼亞語8位字符,則需要設置默認環境以使用羅馬尼亞語代碼頁,並確保使用正確的字體等來顯示這些字符。

更容易將所有內容保留為utf-8並讓魔法發生。

þLatin-1字符,其字節值與Latin-10字符ț 當你讀入字符串時,看起來你沒有指定正確的字符編碼。 據推測,您正在解析的網頁使用的是Latin-10,但是您在沒有指定任何I / O編碼的情況下將其讀入Perl。

如果是這種情況,您應該在打開文件時告訴Perl字符編碼:

open my $fh, '<:encoding(ISO-8859-16)', $file);

或者,如果您無法控制文件打開並想要修復字符串,則可以使用以下命令進行轉換:

use Encode;
Encode::decode('ISO-8859-16', $str);

這兩種方法都將數據轉換為Perl的內部Unicode感知字符串格式,而不是Latin-1字節。

請注意,您可能還需要修復輸出,以根據需要將數據編碼為UTF-8或Latin-10。

在解碼之前簡單的y ///可能會這樣做(如果你的數據和源都在utf中)

my $data = yadayada;
$data =~ tr/áéíóúçãõñ/aeioucaon/;

向我們展示一些實際代碼:)

暫無
暫無

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

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