內容

名稱

utf8 - Perl pragma 用於啟用/停用原始碼中的 UTF-8 (或 UTF-EBCDIC)

語法

use utf8;
no utf8;

# Convert the internal representation of a Perl scalar to/from UTF-8.

$num_octets = utf8::upgrade($string);
$success    = utf8::downgrade($string[, $fail_ok]);

# Change each character of a Perl scalar to/from a series of
# characters that represent the UTF-8 bytes of each original character.

utf8::encode($string);  # "\x{100}"  becomes "\xc4\x80"
utf8::decode($string);  # "\xc4\x80" becomes "\x{100}"

# Convert a code point from the platform native character set to
# Unicode, and vice-versa.
$unicode = utf8::native_to_unicode(ord('A')); # returns 65 on both
                                              # ASCII and EBCDIC
                                              # platforms
$native = utf8::unicode_to_native(65);        # returns 65 on ASCII
                                              # platforms; 193 on
                                              # EBCDIC

$flag = utf8::is_utf8($string); # since Perl 5.8.1
$flag = utf8::valid($string);

說明

use utf8 pragma 告訴 Perl 剖析器允許程式碼文字中使用 UTF-8,範圍為目前的詞彙範圍。no utf8 pragma 告訴 Perl 切換回將原始碼文字視為目前的詞彙範圍中的字元組。 (在 EBCDIC 平台上,技術上允許的是 UTF-EBCDIC,而不是 UTF-8,但這個區別是學術上的,因此在本文檔中,術語 UTF-8 用於表示兩者)。

不要將此 pragma 用於告訴 Perl 您的腳本是用 UTF-8 編寫的以外的任何用途。下面描述的工具函數可以直接使用,而不需要 use utf8;

由於無法可靠地將 UTF-8 與原生 8 位元編碼區分開來,因此您需要在原始碼開頭放置位元組順序標記,或使用 use utf8; 來指示 perl。

當 UTF-8 成為標準原始碼格式時,此 pragma 將實際上變成無操作。

另請參閱 -C 參數及其表親 PERL_UNICODE 環境變數在 perlrun 中的效果。

啟用 utf8 pragma 會產生以下效果

請注意,如果您的腳本中有非 ASCII、非 UTF-8 位元組(例如字串文字中的嵌入式 Latin-1),use utf8 將會不滿意。如果您想要在 use utf8 下有這種位元組,您可以停用此 pragma 直到區塊結束(或檔案,如果在頂層)為止,方法是 no utf8;

公用函式

下列函式是由 Perl 核心定義在 utf8:: 套件中。您不需要說 use utf8 來使用這些函式,事實上您不應該這樣說,除非您真的想要有 UTF-8 原始碼。

utf8::encode 類似於 utf8::upgrade,但會清除 UTF8 標記。請參閱 perlunicode,以及 C API 函式 sv_utf8_upgrade"sv_utf8_downgrade" in perlapi"sv_utf8_encode" in perlapi"sv_utf8_decode" in perlapi,它們由 Perl 函式 utf8::upgradeutf8::downgradeutf8::encodeutf8::decode 封裝。此外,函式 utf8::is_utf8utf8::validutf8::encodeutf8::decodeutf8::upgradeutf8::downgrade 實際上是內部的,因此總是可用,而不需要 require utf8 陳述式。

錯誤

某些檔案系統可能不支援 UTF-8 檔名,或者它們可能與 Perl 不相容地支援。因此,檔案系統可見的 UTF-8 名稱(例如模組名稱)可能無法運作。

另請參閱

perlunitutperluniintroperlrunbytesperlunicode