2015-10-14 52 views
1

閱讀JSON :: XS文檔後,我有點困惑。我的問題是:我如何編碼/解碼已經在UTF8中的數據?調用encode_json似乎會對它們進行雙重編碼。我想從包含UTF8編碼字符串的散列中創建JSON,並在保留數據UTF8編碼的同時將JSON解碼爲散列。是否有可能,還是我需要手動編碼:: decode_utf8/encode_utf8數據我自己?Perl使用JSON序列化UTF8編碼數據

+0

http://stackoverflow.com/help/how-to-ask –

+0

你的字符串是UTF-8編碼還是隻包含Unicode字符? –

+0

已經以UTF-8編碼 – Davs

回答

1

參見perldoc for Json::XS

UTF8標誌禁用

當UTF8被禁用(默認值),則編碼/解碼產生與期望Unicode字符串,即,具有高的序 Unicode字符值(> 255)將被編碼爲這樣的字符,並且 類似地這樣的字符被解碼爲原樣,除了「將(重新)解釋爲Unicode碼點或Unicode 個字符(對Perl來說,這些字符串在 中是一樣的,除非你搞笑/怪異/愚蠢的東西)。

此當你想要做你自己的編碼是有用的(例如,當你想有UTF-16編碼JSON文本)或當一些其他 層確實編碼爲你(例如,打印到 終端時使用透明地編碼爲UTF-8的文件句柄,你當然不希望UTF-8首先編碼你的數據,並讓Perl 再編碼一次)。

UTF8標誌被允許

如果啓用UTF8標誌,編碼/解碼將使用相應的UTF-8多字節序列編碼的所有字符,並且將 期望你的輸入字符串,以被編碼爲UTF-8,即沒有 輸入字符串的「字符」必須具有> 255的任何值,因爲UTF-8 不允許這樣做。

因此,utf8標誌在兩種模式之間切換:disabled表示您將在Perl中獲得Unicode字符串,enabled表示您在Perl中獲得UTF-8 編碼的八位字節/二進制字符串。