![](/img/trans.png)
[英]Is it possible for a Perl script running on a Unix/Linux platform to create Windows Shortcuts?
[英]Windows Perl --> Unix not working after port, possible encoding issue
我有一個在Windows上編寫的Perl程序。 它開始於:
$unused_header = <STDIN>;
my @header_fields = split('\|\^\|', $unused_header, -1);
哪個應拆分包含非常大文件的輸入:
The|^|Quick|^|Brown|^|Fox|!|
進入:
{The, Quick, Brown, Fox|!|}
注意:這條線僅執行headre,還有另一條行重復數據行。
它在Windows上效果很好,但在Linux上卻失敗了。 但是,如果我在Perl中定義了一個具有相同內容的字符串,然后在該字符串上運行split,則可以正常工作。
我認為這是UTF-16編碼處理問題,但我不確定如何處理。 有誰知道我如何獲得perl來了解將UTF-16傳送到STDIN中的方法?
我發現: http : //www.haboogo.com/zh-cn/matching_patterns/2009/01/utf-16-processing-issue-in-perl.html,但是我不確定該如何處理。
如果STDIN為UTF-16,請使用以下之一
binmode(STDIN, ':encoding(UTF-16le)'); # Byte order used by Windows.
binmode(STDIN, ':encoding(UTF-16be)'); # The other byte order.
binmode(STDIN, ':encoding(UTF-16)'); # Use BOM to determine byte order.
湯姆就perl和unicode寫了一個冗長的答案 。 它包含一些bolierplate代碼以正確並完全支持UTF-8,但是您可以根據需要替換為UTF-16。
我懷疑這是UTF-xx編碼問題,因為Windows Perl和Unix Perl都不會嘗試使用這些編碼讀取數據,除非您告知。
如果Unix腳本正在讀取與Windows腳本完全相同的文件,但是行為有所不同,則可能是行尾問題。 大多數Unix-y系統上的dos2unix
命令可以更改文件的行尾,或者您可以在Perl腳本中自己剝離行尾。
$unused_header = <STDIN>;
$unused_header =~ s/\r?\n$//; # chop \r\n (Windows) or \n (Unix)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.