Encode::Supported -- Encode 支援的編碼
編碼名稱不分大小寫。名稱中的空白會被忽略。此外,編碼可能有別名。每個編碼都有唯一一個「正規」名稱。「正規」名稱會從編碼名稱中選取,方式是選取下列順序中的第一個(有幾個例外)。
Perl 社群使用的名稱。包括 'utf8' 和 'ascii'。與別名不同,正規名稱會直接到達方法,因此像 'utf8' 這種經常使用的字詞就不需要進行別名查詢。
在 IETF RFC 中定義的 MIME 名稱。這包括所有「iso-」。
IANA 註冊表中的名稱。
定義該名稱的組織所使用的名稱。
如果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]
----------------------------------------------------------------
null 和 ascii-ctrl 是特殊的。「null」會對所有字元失敗,因此當您將備援模式設定為 PERLQQ、HTMLCREF 或 XMLCREF 時,所有字元都會備援為字元參考。除了控制字元外,「ascii-ctrl」也是如此。有關備援模式,請參閱 Encode。
除了原生 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 實作大多數單位元組編碼,符號和 EBCDIC 除外。下列編碼基於實作為延伸 ASCII 的單一元組編碼。它們大多數會將 \x80-\xff(上半部)對應到非 ASCII 字元。
由於數量眾多,因此以表格格式呈現,其中包含供應商提供的語言和對應的編碼名稱。請注意,表格是依照 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。
儘管 ISO-8859 確實有 ISO-8859-5,但 KOI8 系列在網路上更受歡迎。Encode 隨附下列 KOI 字元集。有關詳細資訊,請參閱 http://czyborra.com/charsets/cyrillic.html
----------------------------------------------------------------
koi8-f
koi8-r cp878 [RFC1489]
koi8-u [RFC2319]
----------------------------------------------------------------
GSM0338 是適用於 GSM 手機的編碼。儘管它與 ASCII 共用字母數字,但控制字元範圍和其他部分的對應方式非常不同,主要是為了儲存希臘字元。另有一些跳脫序列(從 0x1B 開始)用於涵蓋歐元符號等。
這項編碼曾由 Encode::Bytes 處理,但由於所有這些不尋常的規格,Encode 2.20 已將支援移至 Encode::GSM0338。詳情請參閱 Encode::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」編碼。
請注意,越南語已在上面列出。另請閱讀下方的「編碼與字元集」。另請注意,這些編碼由於大小考量,是由各國在不同的模組中實作(簡體中文對應到「CN」,中國大陸,而繁體中文對應到「TW」,台灣)。請參閱其各自的文件頁面。
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>
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 }
----------------------------------------------------------------
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.
Standard DOS/Win Macintosh Comment/Reference
----------------------------------------------------------------
big5-eten cp950 MacChineseTrad {big5 aliased to big5-eten}
big5-hkscs
----------------------------------------------------------------
考量到大小問題,以下其他中文編碼會透過 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
----------------------------------------------------------------
考量到大小問題,以下其他日文編碼會透過 CPAN 以 Encode::JIS2K 的名稱分開散布。
Standard DOS/Win Macintosh Comment/Reference
----------------------------------------------------------------
euc-jisx0213
shiftjisx0123
iso-2022-jp-3
jis0213-1-raw
jis0213-2-raw
----------------------------------------------------------------
請參閱 perlebcdic 以取得詳細資訊。
----------------------------------------------------------------
cp37
cp500
cp875
cp1026
cp1047
posix-bc
----------------------------------------------------------------
用於符號和裝飾符號。
----------------------------------------------------------------
symbol
dingbats
MacDingbats
AdobeZdingbat
AdobeSymbol
----------------------------------------------------------------
嚴格來說,RFC 2047 中記載的 MIME 標頭編碼比較像是封裝,而非編碼。然而,它們在現代世界中是不可或缺的,因此提供支援。
----------------------------------------------------------------
MIME-Header [RFC2047]
MIME-B [RFC2047]
MIME-Q [RFC2047]
----------------------------------------------------------------
這不是編碼名稱,而是一個公用程式,可讓您從給定的 可疑 項目中選取最適合資料的編碼。請參閱 Encode::Guess 以取得詳細資訊。
以下編碼目前不支援;有些是因為很少使用,有些是因為技術上的困難。不過,未來可能會透過 CPAN 中的外部模組提供支援。
目前並不普及。需要 Unicode 資料庫或等效資料庫才能實作 encode()(因為它同時包含 JIS X 0208/0212、KSC5601 和 GB2312,而這些在 Unicode 中的碼點會重疊。因此,您需要查詢資料庫才能判斷給定的 Unicode 字元應屬於哪一個字元集)。
並不普及。需要 CNS 11643-1 和 -2,而本模組中沒有提供。CNS 11643(透過 euc-tw)在 Encode::HanExtra 中有提供支援。Audrey Tang 未來可能會在她的模組中新增對此編碼的支援。
由於缺乏對應資料,因此不支援以下編碼。
'8' - arabic8, greek8, hebrew8, kana8, thai8, and turkish8
'15' - japanese15, korean15, and roi15
Anton Tagunov 質疑其用途。
編碼團隊中沒有一個人夠了解希伯來語(支援 ISO-8859-8、cp1255 和 MacHebrew,是因為且僅因為在 http://www.unicode.org/ 上有可用的對應)。歡迎貢獻。
同上。
同上。
儘管 Jungshik Shin 已報告 Mozilla 支援此編碼,但對我們而言,在 5.8.0 之前為時已晚。未來,它可能會透過獨立模組提供。如果您有興趣協助我們,請參閱 http://lxr.mozilla.org/seamonkey/source/intl/uconv/ucvlatin/vps.uf 和 http://lxr.mozilla.org/seamonkey/source/intl/uconv/ucvlatin/vps.ut 。
由於缺乏對應資料,因此不支援以下編碼。
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/ 上的廠商對應。
下列編碼的地圖可於 http://www.unicode.org/ 取得,但仍未受支援,因為這些編碼需要演算法方法,而 enc2xs 目前不支援。
MacDevanagari
MacGurmukhi
MacGujarati
有關詳細資訊,請參閱 http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/DEVANAGA.TXT 上的Unicode 對應問題和注意事項:
。
我相信這個問題不僅存在於 Mac 印度語,也存在於其他印度語編碼中,但上述是我在 http://www.unicode.org/ 上找到的唯一印度語編碼地圖。
我們習慣於交替使用術語(字元)編碼和字元集。但就像混淆位元組和字元會造成危險,且在需要時應區分這些術語一樣,我們需要區分編碼和字元集。
為了理解這一點,以下是我們如何讓電腦了解我們字元的說明。
首先,我們從要包含哪些字元開始。我們將此字元集合稱為字元曲目。
接著,我們必須為每個字元提供一個唯一的 ID,以便您的電腦可以區分「a」和「A」。這個細項化的字元曲目現在是一個字元集。
如果您的電腦可以在不進一步處理的情況下擴展字元集,您可以繼續使用它。這稱為編碼字元集 (CCS) 或原始字元編碼。大多數情況下,ASCII 就是這樣使用的。
但在許多情況下,尤其是多位元組 CJK 編碼,您必須再調整一下。您的網路連線可能不接受任何設定為最高有效位元組的資料,而您的電腦可能無法分辨給定的位元組是整個字元或只是其中一半。因此,您必須編碼字元集才能使用它。
字元編碼方案 (CES) 決定如何編碼給定的字元集或一組多個字元集。7 位元組 ISO-2022 就是 CES 的一個範例。您可以透過跳脫序列在字元集之間切換。
技術上或數學上來說,以這種 CES 編碼的字元集,對每個字元進行對應,可能會形成 CCS。EUC 就是這樣的範例。EUC 的 CES 如下
不變地對應 ASCII。
對應由 N 個成員的 94 或 96 次方組成的字元集,方法是對每個位元組加上 0x80。
您也可以使用 0x8e 和 0x8f 來表示後面的字元序列屬於另一個字元集。對每個後面的位元組加上值 0x80。
仔細查看編碼的位元組序列,您可以發現位元組序列符合一個唯一的數字。在這個意義上,EUC 是由上述 CES 從最多四個 CCS (複雜嗎?) 生成的 CCS。UTF-8 屬於這個類別。請參閱 perlUnicode 中的「UTF-8」 以了解 UTF-8 如何將 Unicode 對應到位元組序列。
現在您可能也已經發現為什麼 7 位元組 ISO-2022 無法組成 CCS。如果您查看位元組序列 \x21\x21,您無法分辨它是兩個 ! 或表意文字空格。EUC 將後者對應到 \xA1\xA1,因此您無需費力區分「!!」。和 " "。
本節嘗試根據編碼在網際網路上資訊交換的適用性對支援的編碼進行分類,並選擇最適合的別名在這種通訊的背景下為它們命名。
要 (編|解) 編碼標記為 (**)
的編碼,您需要從 CPAN 取得的 Encode::HanExtra
。
編碼名稱
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 相關的命名混亂」 提供詳細資訊。
GB2312
是 EUC-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
支援經過的測試更少
UTF-8
編碼資料可無縫通過傳統指令管線(cat
、more
等),而 UTF-16
編碼資料可能會造成混淆(例如,其零位元組)
無法用言語描述 HTML 瀏覽器編碼非 ASCII
表單資料的方式。若要獲得一般印象,請瀏覽 http://www.alanflavell.org.uk/charset/form-i18n.html。雖然表單資料編碼已針對 UTF-8
編碼頁面穩定下來(至少 IE 5/6、NS 6 和 Opera 6 的行為一致),但請務必預期 UTF-16
編碼頁面會出現問題(以及跨瀏覽器差異)!
經驗法則是在您知道自己在做什麼,且確實受益於使用 UTF-16
的情況下,才使用 UTF-8
。
ISO-IR-165 [RFC1345]
VISCII
GB 12345
GB 18030 (**) (see links below)
EUC-TW (**)
是完全有效的編碼,但未在 IANA 註冊。在此列出的名稱可能是這些編碼最廣為人知的名稱,且為建議使用的名稱。
BIG5PLUS (**)
是專有名稱。
Microsoft 產品誤用下列名稱
Microsoft 對 EUC-KR
的擴充。
正確名稱:CP949
、UHC
、x-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 以取得詳細資料。
Microsoft 對 EUC-CN
的擴充。
正確名稱:CP936
、GBK
。
GB2312
已在 IANA 中註冊為 EUC-CN
的意思。這已部分修復此情況:Microsoft 的 GB2312
已成為官方 GB2312
的超集。
將編碼別名 GB2312
編碼為 euc-cn
,完全符合 IANA 註冊。cp936
另行支援。可將 原始 GB_2312-80
編碼用作 gb2312-raw
。
請參閱 Encode::CN 以取得詳細資料。
Microsoft 對 Big5
的擴充。
正確名稱:CP950
。
Encode 分別支援 Big5
和 cp950
。
Microsoft 對 Shift_JIS
的理解。
然而,JIS 尚未認可完整的 Microsoft 標準。官方 Shift_JIS
僅包含 JIS X 0201 和 JIS X 0208 字元集,而 Microsoft 一直使用 Shift_JIS
編碼更廣泛的字元曲目。請參閱 Windows-31J
的 IANA
註冊。
作為歷史前身,Microsoft 的變體可能對此名稱有更多權利,儘管有人可能會反對 Microsoft 不應一開始就將 JIS 用作名稱的一部分。
明確名稱:CP932
。IANA
名稱(Mozilla 也使用,並由 Encode 提供為別名):Windows-31J
。
Encode 分別支援 Shift_JIS
和 cp932
。
獨特字元的集合。嚴格來說,是字元集。在此階段,字元尚未編號。
以電腦可直接使用的形式對應的字元集。許多字元編碼,包括 EUC,都屬於此類別。
將字元集對應到位元組序列的演算法。您不必能夠分辨給定的位元組序列屬於哪個字元集。7 位元 ISO-2022 是 CES,但它不能是 CCS。EUC 是同時為 CCS 和 CES 的範例。
長久以來,一直用於編碼
、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]
延伸 Unix 字元。請參閱 ISO-2022。
一種經過仔細設計,可與 ASCII 共存的 CES。有 7 位元版本和 8 位元版本。
7 位元版本透過跳脫序列切換字元集,因此無法形成 CCS。由於這比 8 位元版本更難在程式中處理,因此 7 位元版本並不流行,除了 iso-2022-jp,這是電子郵件的實際上標準 CES。
8 位元版本可以形成 CCS。EUC 和 ISO-8859 是兩個範例。5.6 之前的 perl 可以將它們用作字串文字。
通用字元集的縮寫。當您只說 UCS 時,表示Unicode。
ISO/IEC 10646 編碼形式:以兩個八位元組編碼的通用字元集。
一種旨在包含世界上所有字元目錄的字元集。許多國家以及產業標準中的字元集,在某種程度上,都已成為 Unicode 的子集。
Unicode 轉換格式的縮寫。決定如何將 Unicode 字元對應到位元組序列。
16 位元編碼的 UTF。可以是大端序或小端序。大端序版本稱為 UTF-16BE(等於 UCS-2 + 代理支援),小端序版本稱為 UTF-16LE。
編碼、Encode::Byte、Encode::CN、Encode::JP、Encode::KR、Encode::TW、Encode::EBCDIC、Encode::Symbol Encode::MIME::Header、Encode::Guess
歐洲電腦製造商協會 http://www.ecma.ch
ISO-2022
)http://www.ecma.ch/ecma1/STAND/ECMA-035.HTM
ISO-2022 的規格可從上述連結取得。
網際網路號碼分配局 http://www.iana.org/
http://www.iana.org/assignments/character-sets
Encode 中大部分的 正規名稱
都源自此清單,因此您可以直接套用從電子郵件和網頁的 MIME 標頭中擷取的字串。
國際標準化組織 http://www.iso.ch/
徵求意見文件 -- 還要我多說嗎? http://www.rfc-editor.org/、http://www.ietf.org/rfc.html、http://www.faqs.org/rfcs/
Unicode 聯盟 http://www.unicode.org/
http://www.unicode.org/glossary/
本文的字彙是根據此網站建立的。
包含許多有用的資訊,特別是 ISO 與供應商對應的詳細資料。
http://examples.oreilly.com/cjkvinfo/doc/cjk.inf
有點過時(最後更新於 1996 年),但仍然有用。另外,請嘗試
ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/pdf/GB18030_Summary.pdf
您會找到關於 EUC-CN
、GBK
和大部分 GB 18030
的簡要資訊。
特別是其主題 8。
韓文(KS *
)標準的綜合概述。
大部分提到的 CJK 編碼的簡要說明包含在 http://www.debian.org/doc/manuals/intro-i18n/ch-codes.en.html
CJKV 資訊處理
,作者:Ken LundeCJKV 資訊處理 1999 年 O'Reilly & Associates,ISBN:1-56592-224-7
CJK.inf
的現代後繼者。
全面涵蓋 CJKV 字元集和編碼,以及任何人在資訊處理的所有領域中,在嘗試更好地支援 CJKV 語言/腳本時所面臨的許多其他問題。
如需購買此書,請瀏覽 http://oreilly.com/catalog/9780596514471/ 或您最喜歡的書店。