內容

名稱

Encode::Supported -- Encode 支援的編碼

說明

編碼名稱

編碼名稱不分大小寫。名稱中的空白會被忽略。此外,編碼可能有別名。每個編碼都有唯一一個「正規」名稱。「正規」名稱會從編碼名稱中選取,方式是選取下列順序中的第一個(有幾個例外)。

如果de jure 正規名稱與 Encode 模組的不同,則在實作時它們總是別名。因此,您可以安全地透過傳遞正規名稱來判斷是否實作了給定的編碼。

由於所有別名問題,而且在一般情況下編碼有狀態,「Encode」在作業進行中時會在內部使用編碼物件。

受支援編碼

截至 Perl 5.8.0,至少識別下列編碼。請注意,除非另有說明,否則它們全部不區分大小寫(透過別名),且所有空格都替換為「-」。換句話說,「ISO 8859 1」和「iso-8859-1」是相同的。

編碼會分類並在幾個不同的模組中實作,但您不必對大多數情況使用 Encode::XX 來讓它們可用。Encode.pm 會自動依需求載入那些模組。

內建編碼

以下編碼總是可用。

Canonical     Aliases                      Comments & References
----------------------------------------------------------------
ascii         US-ascii ISO-646-US                         [ECMA]
ascii-ctrl			                  Special Encoding
iso-8859-1    latin1                                       [ISO]
null				                  Special Encoding
utf8          UTF-8                                    [RFC2279]
----------------------------------------------------------------

nullascii-ctrl 是特殊的。「null」會對所有字元失敗,因此當您將備援模式設定為 PERLQQ、HTMLCREF 或 XMLCREF 時,所有字元都會備援為字元參考。除了控制字元外,「ascii-ctrl」也是如此。有關備援模式,請參閱 Encode

Encode::Unicode -- 其他 Unicode 編碼

除了原生 utf8 之外的 Unicode 編碼方案由 Encode::Unicode 支援,它會依需求自動載入。

----------------------------------------------------------------
UCS-2BE       UCS-2, iso-10646-1                      [IANA, UC]
UCS-2LE                                                     [UC]
UTF-16                                                      [UC]
UTF-16BE                                                    [UC]
UTF-16LE                                                    [UC]
UTF-32                                                      [UC]
UTF-32BE	UCS-4                                         [UC]
UTF-32LE                                                    [UC]
UTF-7                                                  [RFC2152]
----------------------------------------------------------------

要找出 (UCS-2|UTF-(16|32))(LE|BE)? 之間的差異,請參閱 Encode::Unicode

UTF-7 是一種特殊編碼,它會將 UTF-16BE「重新編碼」為 7 位元編碼。它由 Encode::Unicode::UTF7 另外實作。

Encode::Byte -- 延伸 ASCII

Encode::Byte 實作大多數單位元組編碼,符號和 EBCDIC 除外。下列編碼基於實作為延伸 ASCII 的單一元組編碼。它們大多數會將 \x80-\xff(上半部)對應到非 ASCII 字元。

ISO-8859 和對應的供應商對應

由於數量眾多,因此以表格格式呈現,其中包含供應商提供的語言和對應的編碼名稱。請注意,表格是依照 ISO-8859 排序,而對應的供應商對應則與 ISO 略有不同。詳情請參閱 http://czyborra.com/charsets/iso8859.html

Lang/Regions  ISO/Other Std.  DOS     Windows Macintosh  Others
----------------------------------------------------------------
N. America    (ASCII)         cp437        AdobeStandardEncoding
                              cp863 (DOSCanadaF)
W. Europe     iso-8859-1      cp850   cp1252  MacRoman  nextstep
                                                       hp-roman8
                              cp860 (DOSPortuguese)
Cntrl. Europe iso-8859-2      cp852   cp1250  MacCentralEurRoman
                                              MacCroatian
                                              MacRomanian
                                              MacRumanian
Latin3[1]     iso-8859-3      
Latin4[2]     iso-8859-4              
Cyrillics     iso-8859-5      cp855   cp1251  MacCyrillic
  (See also next section)     cp866           MacUkrainian
Arabic        iso-8859-6      cp864   cp1256  MacArabic
                              cp1006          MacFarsi
Greek         iso-8859-7      cp737   cp1253  MacGreek
                              cp869 (DOSGreek2)
Hebrew        iso-8859-8      cp862   cp1255  MacHebrew
Turkish       iso-8859-9      cp857   cp1254  MacTurkish
Nordics       iso-8859-10     cp865
                              cp861           MacIcelandic
                                              MacSami
Thai          iso-8859-11[3]  cp874           MacThai
(iso-8859-12 is nonexistent. Reserved for Indics?)
Baltics       iso-8859-13     cp775           cp1257
Celtics       iso-8859-14
Latin9 [4]    iso-8859-15
Latin10       iso-8859-16
Vietnamese    viscii                  cp1258  MacVietnamese
----------------------------------------------------------------

[1] Esperanto, Maltese, and Turkish. Turkish is now on 8859-9.
[2] Baltics.  Now on 8859-10, except for Latvian.
[3] TIS 620 +  Non-Breaking Space (0xA0 / U+00A0)
[4] Nicknamed Latin0; the Euro sign as well as French and Finnish
    letters that are missing from 8859-1 were added.

所有 cp* 也可用作 ibm-*, ms-* 和 windows-*。另請參閱 http://czyborra.com/charsets/codepages.html

Macintosh 編碼似乎未在 IANA 等實體中註冊。Encode 中的「正規」名稱是根據 Apple 的技術備忘錄 1150 制定。詳情請參閱 http://developer.apple.com/technotes/tn/tn1150.html

KOI8 - 西里爾世界的實際標準

儘管 ISO-8859 確實有 ISO-8859-5,但 KOI8 系列在網路上更受歡迎。Encode 隨附下列 KOI 字元集。有關詳細資訊,請參閱 http://czyborra.com/charsets/cyrillic.html

----------------------------------------------------------------
koi8-f                                        
koi8-r cp878                                           [RFC1489]
koi8-u                                                 [RFC2319]
----------------------------------------------------------------

gsm0338 - Hentai Latin 1

GSM0338 是適用於 GSM 手機的編碼。儘管它與 ASCII 共用字母數字,但控制字元範圍和其他部分的對應方式非常不同,主要是為了儲存希臘字元。另有一些跳脫序列(從 0x1B 開始)用於涵蓋歐元符號等。

這項編碼曾由 Encode::Bytes 處理,但由於所有這些不尋常的規格,Encode 2.20 已將支援移至 Encode::GSM0338。詳情請參閱 Encode::GSM0338

2.19 之前的 gsm0338 支援

一些特殊情況(例如尾隨的 0x00 位元組或單獨的 0x1B 位元組)未定義良好,而 decode() 會為這些情況傳回空字串。一種可能的解決方法是

$gsm =~ s/\x00\z/\x00\x00/;
$uni = decode("gsm0338", $gsm);
$uni .= "\xA0" if $gsm =~ /\x1B\z/;

請注意,GSM0338 的 Encode 實作並未實作將拉丁大寫字母重新用作希臘大寫字母(例如,0x5A 是 U+005A(拉丁大寫字母 Z),而不是 U+0396(希臘大寫字母 ZETA)。

GSM0338 也涵蓋在 Encode::Byte 中,即使它不是「延伸 ASCII」編碼。

CJK:中文、日文、韓文(多位元組)

請注意,越南語已在上面列出。另請閱讀下方的「編碼與字元集」。另請注意,這些編碼由於大小考量,是由各國在不同的模組中實作(簡體中文對應到「CN」,中國大陸,而繁體中文對應到「TW」,台灣)。請參閱其各自的文件頁面。

Encode::CN -- 中國大陸
Standard      DOS/Win Macintosh                Comment/Reference
----------------------------------------------------------------
euc-cn [1]            MacChineseSimp
(gbk)         cp936 [2]
gb12345-raw                      { GB12345 without CES }
gb2312-raw                       { GB2312  without CES }
hz
iso-ir-165
----------------------------------------------------------------

[1] GB2312 is aliased to this.  See L<Microsoft-related naming mess>
[2] gbk is aliased to this.  See L<Microsoft-related naming mess>
Encode::JP -- 日本
Standard      DOS/Win Macintosh                Comment/Reference
----------------------------------------------------------------
euc-jp
shiftjis      cp932   macJapanese
7bit-jis
iso-2022-jp                                            [RFC1468]
iso-2022-jp-1                                          [RFC2237]
jis0201-raw  { JIS X 0201 (roman + halfwidth kana) without CES }
jis0208-raw  { JIS X 0208 (Kanji + fullwidth kana) without CES }
jis0212-raw  { JIS X 0212 (Extended Kanji)         without CES }
----------------------------------------------------------------
Encode::KR -- 韓國
Standard      DOS/Win Macintosh                Comment/Reference
----------------------------------------------------------------
euc-kr                MacKorean                        [RFC1557]
              cp949 [1]                    
iso-2022-kr                                            [RFC1557]
johab                                  [KS X 1001:1998, Annex 3]
ksc5601-raw                              { KSC5601 without CES }
----------------------------------------------------------------

[1] ks_c_5601-1987, (x-)?windows-949, and uhc are aliased to this.
See below.
Encode::TW -- 台灣
Standard      DOS/Win Macintosh                Comment/Reference
----------------------------------------------------------------
big5-eten     cp950   MacChineseTrad {big5 aliased to big5-eten}
big5-hkscs                              
----------------------------------------------------------------
Encode::HanExtra -- 透過 CPAN 取得更多中文

考量到大小問題,以下其他中文編碼會透過 CPAN 以 Encode::HanExtra 的名稱分開散布。

Standard      DOS/Win Macintosh                Comment/Reference
----------------------------------------------------------------
big5ext                                   CMEX's Big5e Extension
big5plus                                  CMEX's Big5+ Extension
cccii         Chinese Character Code for Information Interchange
euc-tw                             EUC (Extended Unix Character)
gb18030                          GBK with Traditional Characters
----------------------------------------------------------------
Encode::JIS2K -- 透過 CPAN 取得 JIS X 0213 編碼

考量到大小問題,以下其他日文編碼會透過 CPAN 以 Encode::JIS2K 的名稱分開散布。

Standard      DOS/Win Macintosh                Comment/Reference
----------------------------------------------------------------
euc-jisx0213
shiftjisx0123
iso-2022-jp-3
jis0213-1-raw
jis0213-2-raw
----------------------------------------------------------------

其他編碼

Encode::EBCDIC

請參閱 perlebcdic 以取得詳細資訊。

----------------------------------------------------------------
cp37
cp500  
cp875  
cp1026  
cp1047  
posix-bc
----------------------------------------------------------------
Encode::Symbols

用於符號和裝飾符號。

----------------------------------------------------------------
symbol
dingbats
MacDingbats
AdobeZdingbat
AdobeSymbol
----------------------------------------------------------------
Encode::MIME::Header

嚴格來說,RFC 2047 中記載的 MIME 標頭編碼比較像是封裝,而非編碼。然而,它們在現代世界中是不可或缺的,因此提供支援。

----------------------------------------------------------------
MIME-Header                                            [RFC2047]
MIME-B                                                 [RFC2047]
MIME-Q                                                 [RFC2047]
----------------------------------------------------------------
Encode::Guess

這不是編碼名稱,而是一個公用程式,可讓您從給定的 可疑 項目中選取最適合資料的編碼。請參閱 Encode::Guess 以取得詳細資訊。

不支援的編碼

以下編碼目前不支援;有些是因為很少使用,有些是因為技術上的困難。不過,未來可能會透過 CPAN 中的外部模組提供支援。

ISO-2022-JP-2 [RFC1554]

目前並不普及。需要 Unicode 資料庫或等效資料庫才能實作 encode()(因為它同時包含 JIS X 0208/0212、KSC5601 和 GB2312,而這些在 Unicode 中的碼點會重疊。因此,您需要查詢資料庫才能判斷給定的 Unicode 字元應屬於哪一個字元集)。

ISO-2022-CN [RFC1922]

並不普及。需要 CNS 11643-1 和 -2,而本模組中沒有提供。CNS 11643(透過 euc-tw)在 Encode::HanExtra 中有提供支援。Audrey Tang 未來可能會在她的模組中新增對此編碼的支援。

各種 HP-UX 編碼

由於缺乏對應資料,因此不支援以下編碼。

'8'  - arabic8, greek8, hebrew8, kana8, thai8, and turkish8
'15' - japanese15, korean15, and roi15
西里爾文編碼 ISO-IR-111

Anton Tagunov 質疑其用途。

ISO-8859-8-1 [希伯來語]

編碼團隊中沒有一個人夠了解希伯來語(支援 ISO-8859-8、cp1255 和 MacHebrew,是因為且僅因為在 http://www.unicode.org/ 上有可用的對應)。歡迎貢獻。

ISIRI 3342、伊朗系統、ISIRI 2900 [波斯語]

同上。

泰語編碼 TCVN

同上。

越南語編碼 VPS

儘管 Jungshik Shin 已報告 Mozilla 支援此編碼,但對我們而言,在 5.8.0 之前為時已晚。未來,它可能會透過獨立模組提供。如果您有興趣協助我們,請參閱 http://lxr.mozilla.org/seamonkey/source/intl/uconv/ucvlatin/vps.ufhttp://lxr.mozilla.org/seamonkey/source/intl/uconv/ucvlatin/vps.ut

各種 Mac 編碼

由於缺乏對應資料,因此不支援以下編碼。

MacArmenian,  MacBengali,   MacBurmese,   MacEthiopic
MacExtArabic, MacGeorgian,  MacKannada,   MacKhmer
MacLaotian,   MacMalayalam, MacMongolian, MacOriya
MacSinhalese, MacTamil,     MacTelugu,    MacTibetan
MacVietnamese

其他已可用的編碼,皆基於 http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/ 上的廠商對應。

(Mac) 印度語編碼

下列編碼的地圖可於 http://www.unicode.org/ 取得,但仍未受支援,因為這些編碼需要演算法方法,而 enc2xs 目前不支援。

MacDevanagari
MacGurmukhi
MacGujarati

有關詳細資訊,請參閱 http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/DEVANAGA.TXT 上的Unicode 對應問題和注意事項:

我相信這個問題不僅存在於 Mac 印度語,也存在於其他印度語編碼中,但上述是我在 http://www.unicode.org/ 上找到的唯一印度語編碼地圖。

編碼相對於字元集 -- 術語

我們習慣於交替使用術語(字元)編碼字元集。但就像混淆位元組和字元會造成危險,且在需要時應區分這些術語一樣,我們需要區分編碼字元集

為了理解這一點,以下是我們如何讓電腦了解我們字元的說明。

技術上或數學上來說,以這種 CES 編碼的字元集,對每個字元進行對應,可能會形成 CCS。EUC 就是這樣的範例。EUC 的 CES 如下

仔細查看編碼的位元組序列,您可以發現位元組序列符合一個唯一的數字。在這個意義上,EUC 是由上述 CES 從最多四個 CCS (複雜嗎?) 生成的 CCS。UTF-8 屬於這個類別。請參閱 perlUnicode 中的「UTF-8」 以了解 UTF-8 如何將 Unicode 對應到位元組序列。

現在您可能也已經發現為什麼 7 位元組 ISO-2022 無法組成 CCS。如果您查看位元組序列 \x21\x21,您無法分辨它是兩個 ! 或表意文字空格。EUC 將後者對應到 \xA1\xA1,因此您無需費力區分「!!」。和 " "

編碼分類 (由 Anton Tagunov 和 Dan Kogai)

本節嘗試根據編碼在網際網路上資訊交換的適用性對支援的編碼進行分類,並選擇最適合的別名在這種通訊的背景下為它們命名。

編碼名稱

US-ASCII    UTF-8    ISO-8859-*  KOI8-R
Shift_JIS   EUC-JP   ISO-2022-JP ISO-2022-JP-1
EUC-KR      Big5     GB2312

已向 IANA 註冊為偏好的 MIME 名稱,且可在網際網路上使用。

Shift_JIS 已由 JIS X 0208:1997 正式化。 「與 Microsoft 相關的命名混亂」 提供詳細資訊。

GB2312EUC-CN 的 IANA 名稱。請參閱 「與 Microsoft 相關的命名混亂」 以取得詳細資訊。

GB_2312-80 原始 編碼可透過 Encode 以 gb2312-raw 形式取得。請參閱 Encode::CN 以取得詳細資訊。

EUC-CN
KOI8-U        [RFC2319]

尚未向 IANA 註冊(截至 2002 年 3 月),但似乎受到主要網路瀏覽器的支援。EUC-CN 的 IANA 名稱為 GB2312

KS_C_5601-1987

遭到嚴重濫用。請參閱 「與 Microsoft 相關的命名混亂」 以取得詳細資訊。

KS_C_5601-1987 原始 編碼可透過 Encode 以 kcs5601-raw 形式取得。請參閱 Encode::KR 以取得詳細資訊。

UTF-16 UTF-16BE UTF-16LE

是 IANA 註冊的 charset。請參閱 [RFC 2781] 以取得詳細資訊。Jungshik Shin 回報,帶有 BOM 的 UTF-16 受到 MS IE 5/6 和 NS 4/6 的廣泛接受。但請注意

經驗法則是在您知道自己在做什麼,且確實受益於使用 UTF-16 的情況下,才使用 UTF-8

ISO-IR-165    [RFC1345]
VISCII
GB 12345
GB 18030 (**)  (see links below)
EUC-TW   (**)

是完全有效的編碼,但未在 IANA 註冊。在此列出的名稱可能是這些編碼最廣為人知的名稱,且為建議使用的名稱。

BIG5PLUS (**)

是專有名稱。

Microsoft 產品誤用下列名稱

KS_C_5601-1987

Microsoft 對 EUC-KR 的擴充。

正確名稱:CP949UHCx-windows-949(Mozilla 使用)。

請參閱 http://lists.w3.org/Archives/Public/ietf-charsets/2001AprJun/0033.html 以取得詳細資料。

將編碼別名 KS_C_5601-1987 編碼為 cp949 以反映此常見誤用。可將 原始 KS_C_5601-1987 編碼用作 kcs5601-raw

請參閱 Encode::KR 以取得詳細資料。

GB2312

Microsoft 對 EUC-CN 的擴充。

正確名稱:CP936GBK

GB2312 已在 IANA 中註冊為 EUC-CN 的意思。這已部分修復此情況:Microsoft 的 GB2312 已成為官方 GB2312 的超集。

將編碼別名 GB2312 編碼為 euc-cn,完全符合 IANA 註冊。cp936 另行支援。可將 原始 GB_2312-80 編碼用作 gb2312-raw

請參閱 Encode::CN 以取得詳細資料。

Big5

Microsoft 對 Big5 的擴充。

正確名稱:CP950

Encode 分別支援 Big5cp950

Shift_JIS

Microsoft 對 Shift_JIS 的理解。

然而,JIS 尚未認可完整的 Microsoft 標準。官方 Shift_JIS 僅包含 JIS X 0201 和 JIS X 0208 字元集,而 Microsoft 一直使用 Shift_JIS 編碼更廣泛的字元曲目。請參閱 Windows-31JIANA 註冊。

作為歷史前身,Microsoft 的變體可能對此名稱有更多權利,儘管有人可能會反對 Microsoft 不應一開始就將 JIS 用作名稱的一部分。

明確名稱:CP932IANA 名稱(Mozilla 也使用,並由 Encode 提供為別名):Windows-31J

Encode 分別支援 Shift_JIScp932

詞彙表

字元曲目

獨特字元的集合。嚴格來說,是字元集。在此階段,字元尚未編號。

編碼字元集 (CCS)

以電腦可直接使用的形式對應的字元集。許多字元編碼,包括 EUC,都屬於此類別。

字元編碼方案 (CES)

將字元集對應到位元組序列的演算法。您不必能夠分辨給定的位元組序列屬於哪個字元集。7 位元 ISO-2022 是 CES,但它不能是 CCS。EUC 是同時為 CCS 和 CES 的範例。

字元集 (在 MIME 背景中)

長久以來,一直用於編碼、CES 的意義。

雖然字詞組合字元集在 [RFC 2130] 之後,在 MIME 背景中已失去此意義,但字元集縮寫仍保留此意義。以下是 [RFC 2277] 和 [RFC 2278] 如何認可字元集

This document uses the term "charset" to mean a set of rules for
mapping from a sequence of octets to a sequence of characters, such
as the combination of a coded character set and a character encoding
scheme; this is also what is used as an identifier in MIME "charset="
parameters, and registered in the IANA charset registry ...  (Note
that this is NOT a term used by other standards bodies, such as ISO).
[RFC 2277]
EUC

延伸 Unix 字元。請參閱 ISO-2022。

ISO-2022

一種經過仔細設計,可與 ASCII 共存的 CES。有 7 位元版本和 8 位元版本。

7 位元版本透過跳脫序列切換字元集,因此無法形成 CCS。由於這比 8 位元版本更難在程式中處理,因此 7 位元版本並不流行,除了 iso-2022-jp,這是電子郵件的實際上標準 CES。

8 位元版本可以形成 CCS。EUC 和 ISO-8859 是兩個範例。5.6 之前的 perl 可以將它們用作字串文字。

UCS

通用字元集的縮寫。當您只說 UCS 時,表示Unicode

UCS-2

ISO/IEC 10646 編碼形式:以兩個八位元組編碼的通用字元集。

Unicode

一種旨在包含世界上所有字元目錄的字元集。許多國家以及產業標準中的字元集,在某種程度上,都已成為 Unicode 的子集。

UTF

Unicode 轉換格式的縮寫。決定如何將 Unicode 字元對應到位元組序列。

UTF-16

16 位元編碼的 UTF。可以是大端序或小端序。大端序版本稱為 UTF-16BE(等於 UCS-2 + 代理支援),小端序版本稱為 UTF-16LE。

另請參閱

編碼Encode::ByteEncode::CNEncode::JPEncode::KREncode::TWEncode::EBCDICEncode::Symbol Encode::MIME::HeaderEncode::Guess

參考資料

ECMA

歐洲電腦製造商協會 http://www.ecma.ch

ECMA-035(等於 ISO-2022

http://www.ecma.ch/ecma1/STAND/ECMA-035.HTM

ISO-2022 的規格可從上述連結取得。

IANA

網際網路號碼分配局 http://www.iana.org/

IANA 分配的字元集名稱

http://www.iana.org/assignments/character-sets

Encode 中大部分的 正規名稱都源自此清單,因此您可以直接套用從電子郵件和網頁的 MIME 標頭中擷取的字串。

ISO

國際標準化組織 http://www.iso.ch/

RFC

徵求意見文件 -- 還要我多說嗎? http://www.rfc-editor.org/http://www.ietf.org/rfc.htmlhttp://www.faqs.org/rfcs/

UC

Unicode 聯盟 http://www.unicode.org/

Unicode 字彙

http://www.unicode.org/glossary/

本文的字彙是根據此網站建立的。

其他值得注意的網站

czyborra.com

http://czyborra.com/

包含許多有用的資訊,特別是 ISO 與供應商對應的詳細資料。

CJK.inf

http://examples.oreilly.com/cjkvinfo/doc/cjk.inf

有點過時(最後更新於 1996 年),但仍然有用。另外,請嘗試

ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/pdf/GB18030_Summary.pdf

您會找到關於 EUC-CNGBK 和大部分 GB 18030 的簡要資訊。

Jungshik Shin 的韓文常見問題

http://jshin.net/faq

特別是其主題 8。

http://jshin.net/faq/qa8.html

韓文(KS *)標準的綜合概述。

debian.org:「i18n 簡介」

大部分提到的 CJK 編碼的簡要說明包含在 http://www.debian.org/doc/manuals/intro-i18n/ch-codes.en.html

離線來源

CJKV 資訊處理,作者:Ken Lunde

CJKV 資訊處理 1999 年 O'Reilly & Associates,ISBN:1-56592-224-7

CJK.inf 的現代後繼者。

全面涵蓋 CJKV 字元集和編碼,以及任何人在資訊處理的所有領域中,在嘗試更好地支援 CJKV 語言/腳本時所面臨的許多其他問題。

如需購買此書,請瀏覽 http://oreilly.com/catalog/9780596514471/ 或您最喜歡的書店。