簡體   English   中英

IPC :: Open3轉換字符編碼

[英]IPC::Open3 converting character encoding

我正在觀察IPC :: Open3參數作為腳本一部分的奇怪行為。

我給出一個包含ISO-8859-15的字符串。 就在調用open3()之前(字面上的聲明),字符串是正確的(已通過printData::Dumper驗證)。

但是,一旦子進程啟動,參數現在將以UTF-8編碼。 我已經使用所需的可執行文件(freebcp)和包裝器腳本驗證了這一點。 我最終寫了一個包裝器腳本,該腳本將所有參數都轉換回ISO-8859-15。

是什么導致這種行為? LANG設置為en_AU.ISO-8859-15。 它可以在其他主機上正常工作。 我找不到對binmode()的任何引用

我有一個包含ISO-8859-15的字符串。 就在open3()之前(字面上的聲明),字符串是正確的(已通過printData::Dumper驗證)。

但是,一旦子進程啟動,參數現在將以UTF-8編碼。

LANG設置為en_AU.ISO-8859-15。

默認情況下,Perl5不執行任何編碼轉換:將字符串視為啞字節數組。

也就是說,直到你告訴Perl的字符串包含Unicode的,例如通過調用decode()或貼有編碼層(通過文件句柄讀取字符串binmode()或通過open()標志,或通過use open使用:encoding / :locale ,或使用-C開關通過命令行。)

由於您的字符串在ISO-8859-15中,但是以UTF-8輸出,因此Perl知道字符串的編碼。 您已經以某種方式告訴Perl字符串的編碼,並將其轉換為Unicode,而該Unicode在內部使用UTF-8表示。 現在似乎已打印到open3()文件句柄的UTF-8。

作為一種可能的解決方案,在輸出字符串之前,應嘗試將字符串顯式轉換為所需的編碼。

PS使用utf8::is_utf8()函數,您可以嘗試調試/查找何時/如何將字符串轉換為Unicode,以及它們是否真正為Unicode。

暫無
暫無

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

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