我在Perl中排序的問題在Windows和Unix中有不同的結果。Perl - 在Windows中排序與Windows不同
的字符爲:A - _ 1 2
In Windows: _ 1 2 - a
In Unix: _ - 1 2 a
我猜的語言環境有事情做與此 - 我能做些什麼來使Unix的排序匹配Windows排序?
謝謝!
我在Perl中排序的問題在Windows和Unix中有不同的結果。Perl - 在Windows中排序與Windows不同
的字符爲:A - _ 1 2
In Windows: _ 1 2 - a
In Unix: _ - 1 2 a
我猜的語言環境有事情做與此 - 我能做些什麼來使Unix的排序匹配Windows排序?
謝謝!
文檔說:
***警告***環境指定的區域設置會影響排序順序。設置LC_ALL = C以獲得使用本機字節值的傳統排序順序。
所以使用
LC_ALL=C sort ...
例子:
$ perl -E'say for @ARGV' a - _ 1 2 | LC_ALL=en_US.UTF-8 sort
_
-
1
2
a
$ perl -E'say for @ARGV' a - _ 1 2 | LC_ALL=C sort
-
1
2
_
a
如果你不想使用的語言環境中,註釋掉含
use locale;
行沒有這樣的線路,sort
在Windows和Unix上,Perl的表現應該相同。
您還可以添加
no locale;
的sort
之前(或者,更好的,封閉的排序爲開始與它的塊)。
我在腳本中沒有「使用語言環境」。 – 2012-02-16 16:58:03
@Mike只需要一個模塊就可以在任何地方改變它。 – 2012-02-16 21:57:27
@Mike:已更新。 – choroba 2012-02-17 08:17:29
對文本的代碼點排序最好是可疑的。 – tchrist 2012-02-16 03:42:40
這些與Windows中的結果仍然不一樣。我需要它匹配Windows的排序 - 在Unix上有一個排序規則會做到這一點嗎? – 2012-02-16 16:58:41
@Mike,oo,我發現Windows也使用本地。那麼,你必須找出你的Windows使用的是什麼本地的,並且看看你的unix系統上是否有相應的一個,並且如我所展示的那樣使用它來代替'C'。祝你好運! – ikegami 2012-02-16 18:32:26