[英]IPC::Open3 converting character encoding
我正在觀察IPC :: Open3參數作為腳本一部分的奇怪行為。
我給出一個包含ISO-8859-15的字符串。 就在調用open3()之前(字面上的聲明),字符串是正確的(已通過print
和Data::Dumper
驗證)。
但是,一旦子進程啟動,參數現在將以UTF-8編碼。 我已經使用所需的可執行文件(freebcp)和包裝器腳本驗證了這一點。 我最終寫了一個包裝器腳本,該腳本將所有參數都轉換回ISO-8859-15。
是什么導致這種行為? LANG設置為en_AU.ISO-8859-15。 它可以在其他主機上正常工作。 我找不到對binmode()的任何引用
我有一個包含ISO-8859-15的字符串。 就在
open3()
之前(字面上的聲明),字符串是正確的(已通過Data::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.