2017-08-04 48 views
0

我有以下文字:轉換怪異字符在Perl

E=MC² 

我有以下代碼:

$xml.="  <author initial=\"EM\"><![CDATA[E=MC²]]></author>\n"; 

出於某種原因,當我嘗試用這裏面的XML,它拋出這樣的:

This page contains the following errors: 

error on line 897 at column 36: Encoding error 

我正在使用perl來處理XML轉換。

在修復此問題的perl代碼中,我需要做些什麼?

我不知道如何因爲即時通訊仍然相當新的perl的東西我會發布什麼香港專業教育學院做

+2

您可能需要'使用utf8'編譯指示,因爲您的源代碼包含utf8編碼數據,您可能需要將正在編寫'$ xml'的句柄設置爲'binmode'。我假設這是在一個CGI程序中,所以你至少必須做'binmode STDOUT'。此外,請確保您的XML具有正確的字符集信息。沒有關於你的程序的更多信息,很難說。你可以創建一個能夠重現這一點的[mcve]。 – simbabque

+0

沒有編碼的庫嗎?我不應該這樣做。我應該能夠通過某種編碼操作來傳遞此字符,而不必修改我的代碼的體系結構。 – jkushner

+1

你不需要一個庫。你需要正確編寫你的程序。如果你的源代碼包含utf8字符,你需要告訴Perl。當然,您可以將每個字符轉換爲帶有一些庫的html實體,但是您不需要CDATA。那件事的想法是,你可以從字面上得到你想要的東西。但是你需要告訴Perl什麼編碼你的輸出。這與你的_架構_完全無關。請創建一個[mcve]。用目前的描述來回答你的問題是不可能的。 – simbabque

回答

1

添加的編碼信息的XML字符串的開頭這段代碼:

xml_example.pl

#!/usr/bin/env perl 

use warnings; 
use strict; 
use XML::LibXML; 

my $xml = '<?xml version="1.0" encoding="utf8"?>' . "\n"; 
$xml .= "<author initial=\"EM\"><![CDATA[E=MC²]]></author>\n"; 

my $dom; 
eval { 
    $dom = XML::LibXML->load_xml(string => $xml); 
}; 

if ([email protected]) { 
    print "ERROR: " . [email protected]; 
} else { 
    print $dom->toString(); 
} 

輸出

<?xml version="1.0" encoding="utf8"?> 
<author initial="EM"><![CDATA[E=MC²]]></author>