[英]How can I guess if a string has text or binary data in Perl?
找出標量值是ASCII / UTF8(文本)還是Perl中的二進制數據的最佳方法是什么? 此代碼正確嗎?:
if (is_utf8($scalar, 1) or ($scalar =~ m/\A [[:ascii:]]* \Z/xms)) {
# $scalar is a text
}
else {
# $scalar is a binary
}
有沒有更好的辦法?
is_utf8
測試Perl utf8標志是否打開。 標量可能包含正確格式的utf-8且未打開標志。 我認為即使是格式錯誤的utf-8,也有可能故意將標志打開,但是我不確定。
要檢查標量是否包含UTF-8數據,您需要檢查該標志,如果不是,還可以嘗試類似
eval {
my $utf8 = decode_utf8 ($scalar);
}
然后檢查$@
錯誤。
要檢查非UTF-8標量是否包含非ASCII數據,您的想法$scalar =~ m/\\A [[:ascii:]]* \\Z/xms
看起來不錯。
顯然, 最好的方法是在讀取數據時僅進行跟蹤。 作為程序員,您應該已經知道要獲取文本(及其編碼)還是二進制數據。 閱讀文本時,可以將其Encode::decode()
(有關詳細信息,請參見http://p3rl.org/UNI )成Perl文本字符串。
如果您真的不知道,則-T
和-B
文件測試可提供啟發式功能。
忽略Kinopiko的回答,在大多數情況下,您不需要了解數據的內部表示,並且弄混utf8
pragma模塊中的實用程序功能是錯誤的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.