簡體   English   中英

我如何猜測字符串在Perl中是否具有文本或二進制數據?

[英]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.

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