『壹』 Unicode中文,日文,韓文,西歐語言等的編碼區間是什麼
Unicode中文,日文,韓文,西歐語言等的編碼區間是
4E00-9FBF:CJK 統一表意符號 (CJK Unified Ideographs)
0000-007F:C0控制符及基本拉丁文 (C0 Control and Basic Latin)
0080-00FF:C1控制符及拉丁文補充-1 (C1 Control and Latin 1 Supplement)
0100-017F:拉丁文擴展-A (Latin Extended-A)
0180-024F:拉丁文擴展-B (Latin Extended-B)
0250-02AF:國際音標擴展 (IPA Extensions)
02B0-02FF:空白修飾字母 (Spacing Modifiers)
0300-036F:結合用讀音符號 (Combining Diacritics Marks)
0370-03FF:希臘文及科普特文 (Greek and Coptic) Microsoft Word。
『貳』 Unicode字元是什麼
Unicode 是一種重要的交互和顯示的通用字元編碼標准,它覆蓋了美國、歐洲、中東、非洲、印度、亞洲和太平洋的語言,以及古文和專業符號。Unicode 允許交換、處理和顯示多語言文本以及公用的專業和數學符號。它希望能夠解決多語言的計算,如不同國家的字元標准,但並不是所有的現代或古文都能夠獲得支持。
Unicode 字元可以適用於所有已知的編碼。Unicode 是繼 ASCII(美國國家交互信息標准編碼)字元碼後的一種新字元編碼,它為每一個符號定義一個數字和名稱,並指定字元和它的數值(碼位),以及該值的二進制位表示法,通過一個十六進制數字和前綴(U)定義一個16位的數值,如:U+0041 表示 A,其唯一的名稱是 LATIN CAPITAL LETTER A。但請注意:javaScript 1.3 之前的版本並不支持 Unicode 編碼。
Unicode 與 ASCII 和 ISO 的兼容性
Unicode 兼容於 ASCII 字元並被大多數程序所支持,前128個 Unicode 碼同 ASCII 碼具有同樣的位元組值;Unicode 字元從 U+0020 到 U+007E 等同與 ASCII 碼的 0x20 到 0x7E,不同於支持拉丁字母的7位 ASCII,Unicode 對每個字元進行16位值的編碼設置,它允許幾萬個字元,例如 Unicode 2.0 版包含 38,885 個字元,它也可以進行擴展,如 UTF-16 允許用16位字元組合為一百萬或更多的字元,UTF 將編碼轉換為真實的二進制位。
Unicode 完全兼容於國際標准 ISO/IEC 10646-1; 1993,它是 ISO 10646 的一個子集,並支持用兩個八進制數的 ISO UCS-2(Universal Character Set)。JavaScript 1.3 版本對 Unicode 的支持意味著您可以任意地在程序中使用本地的字元以及特殊的科學符號。Unicode 提供了一種標準的方法來編碼多語言文本,並且因為它兼容於 ASCII ,您也可以隨意使用 ASCII 字元。
Unicode 轉義序列
您可以在字元直接量中使用 Unicode 轉義序列,該轉義序列由六個 ASCII 字元組成:\u 加上一個四個數值的十六進制數。如:\u00A9 表示版權符號。JavaScript 里的每一個 Unicode 轉義序列由一個字元所對應解釋。下表是經常使用的特殊字元和它們的 Unicode 值。
類別 Unicode 值 名稱 格式名稱
空白(whitespace ) \u0009 製表符 <TAB>
\u000B 垂直製表符 <VT>
\u000C 換頁符 <FF>
\u0020 空格 <SP>
行結束符值 \u000A 換行符 <LF>
\u000D 回車符 <CR>
其它 Unicode 轉義序列值 \u000b 退格符 <BS>
\u0009 水平製表符 <HT>
\u0022 雙引號 "
\u0027 單引號 '
\u005C 反斜杠 /
JavaScript 對 Unicode 轉義序列的用法不同於 Java。首先,在 JavaScript 中轉義序列並沒有解釋為一個特殊的字元。例如:在一個字元串中的換行符轉義序列在函數被解譯前並不會終止該字元串,如果在注釋中使用轉義序列 JavaScript 將會忽略它。在 Java 中,如果一個轉義序列被用於一個單獨的注釋行,它將被解譯為一個 Unicode 字元。對於一個字元串直接量,Java 編譯器將首先解譯轉義序列。例如:如果在 Java 中使用一個換行符(\u000A),它將會終止該字元串,在 Java 中將導致一個錯誤,因為在字元串直接量中不允許換行,您必須使用 \n 符;而在 JavaScript 中,這兩者之間並沒有區別。
用 Unicode 顯示字元
您可以在不同的語言中使用 Unicode 來顯示字元或專業符號,但這需要一個客戶端能夠支持 Unicode,例如 Netscape Navigator 4.x,並且客戶端還得支持 Unicode 字體以及操作平台的支援。例如 Windows 95 它只支持部分的 Unicode,另外,為了輸入非 ASCII 字元,您還得有支持所有 Unicode 字元的輸入設備,一個標準的擴展鍵盤不能夠做到這一點,但我們可以用 Unicode 轉義序列來輸入 Unicode 字元。如果您還需了解 Unicode 更多的信息,請參見 Unicode Consortium Web site 2.0版。
『叄』 java處理unicode字元
unicode編碼簡而言之就是將每一個字元用16位2進制數標識。但是通常都用4位的16進制數標識。
例如:
1)中文字元串"你好"的unicode碼為:\u60\u597d;
2)英文字元串"ab"的unicode碼為:\u0061\u0062;
其中\u是標識unicode碼用的,後面的4位16進制數則是對應字元的unicode碼。
unicode碼在J2EE項目中應用廣泛,java對unicode碼提供了很好的支持。例如國際化,則是unicode的經典運用。
那麼unicode的編碼規則具體是什麼,如何用程序實現?
1、unicode編碼規則
unicode碼對每一個字元用4位16進制數表示。具體規則是:將一個字元(char)的高8位與低8位分別取出,轉化為16進制數,
如果轉化的16進制數的長度不足2位,則在其後補0,然後將高、低8位轉成的16進制字元串拼接起來並在前面補上"\u" 即可。
2、轉碼程序
1)字元串轉unicode
/**
* 將字元串轉成unicode
* @param str 待轉字元串
* @return unicode字元串
*/
public String convert(String str)
{
str = (str == null ? "" : str);
String tmp;
StringBuffer sb = new StringBuffer(1000);
char c;
int i, j;
sb.setLength(0);
for (i = 0; i < str.length(); i++)
{
c = str.charAt(i);
sb.append("\\u");
j = (c >>>8); //取出高8位
tmp = Integer.toHexString(j);
if (tmp.length() == 1)
sb.append("0");
sb.append(tmp);
j = (c & 0xFF); //取出低8位
tmp = Integer.toHexString(j);
if (tmp.length() == 1)
sb.append("0");
sb.append(tmp);
}
return (new String(sb));
}
2)unicode轉成字元串,與上述過程反向操作即可
/**
* 將unicode 字元串
* @param str 待轉字元串
* @return 普通字元串
*/
public String revert(String str)
{
str = (str == null ? "" : str);
if (str.indexOf("\\u") == -1)//如果不是unicode碼則原樣返回
return str;
StringBuffer sb = new StringBuffer(1000);
for (int i = 0; i < str.length() - 6;)
{
String strTemp = str.substring(i, i + 6);
String value = strTemp.substring(2);
int c = 0;
for (int j = 0; j < value.length(); j++)
{
char tempChar = value.charAt(j);
int t = 0;
switch (tempChar)
{
case 'a':
t = 10;
break;
case 'b':
t = 11;
break;
case 'c':
t = 12;
break;
case 'd':
t = 13;
break;
case 'e':
t = 14;
break;
case 'f':
t = 15;
break;
default:
t = tempChar - 48;
break;
}
c += t * ((int) Math.pow(16, (value.length() - j - 1)));
}
sb.append((char) c);
i = i + 6;
}
return sb.toString();
}
『肆』 windows操作系統unicode文本編碼格式是UTF-8還是UTF-16現在的系統
什麼是 Unicode? 歷史上, 有兩個獨立的, 創立單一字元集的嘗試. 一個是國際標准化組織(ISO)的 ISO 10646 項目, 另一個是由(一開始大多是美國的)多語言軟體製造商組成的協會組織的 Unicode 項目. 幸運的是, 1991年前後, 兩個項目的參與者都認識到, 世界不需要兩個不同的單一字元集. 它們合並雙方的工作成果, 並為創立一個單一編碼表而協同工作. 兩個項目仍都存在並獨立地公布各自的標准, 但 Unicode 協會和 ISO/IEC JTC1/SC2 都同意保持 Unicode 和 ISO 10646 標準的碼表兼容, 並緊密地共同調整任何未來的擴展. Unicode vs ISO 10646 Unicode 協會公布的 Unicode 標准 嚴密地包含了 ISO 10646-1 實現級別3的基本多語言面. 在兩個標准里所有的字元都在相同的位置並且有相同的名字. Unicode 標准額外定義了許多與字元有關的語義符號學, 一般而言是對於實現高質量的印刷出版系統的更好的參考. Unicode 詳細說明了繪制某些語言(比如阿拉伯語)表達形式的演算法, 處理雙向文字(比如拉丁與希伯來文混合文字)的演算法和 排序與字元串比較 所需的演算法, 以及其他許多東西. 另一方面, ISO 10646 標准, 就象廣為人知的 ISO 8859 標准一樣, 只不過是一個簡單的字元集表. 它指定了一些與標准有關的術語, 定義了一些編碼的別名, 並包括了規范說明, 指定了怎樣使用 UCS 連接其他 ISO 標準的實現, 比如 ISO 6429 和 ISO 2022. 還有一些與 ISO 緊密相關的, 比如 ISO 14651 是關於 UCS 字元串排序的. 考慮到 Unicode 標准有一個易記的名字, 且在任何好的書店裡的 Addison-Wesley 里有, 只花費 ISO 版本的一小部分, 且包括更多的輔助信息, 因而它成為使用廣泛得多的參考也就不足為奇了. 然而, 一般認為, 用於列印 ISO 10646-1 標準的字體在某些方面的質量要高於用於列印 Unicode 2.0的. 專業字體設計者總是被建議說要兩個標准都實現, 但一些提供的樣例字形有顯著的區別. ISO 10646-1 標准同樣使用四種不同的風格變體來顯示表意文字如中文, 日文和韓文 (CJK), 而 Unicode 2.0 的表裡只有中文的變體. 這導致了普遍的認為 Unicode 對日本用戶來說是不可接收的傳說, 盡管是錯誤的. UTF-8 首先 UCS 和 Unicode 只是分配整數給字元的編碼表. 現在存在好幾種將一串字元表示為一串位元組的方法. 最顯而易見的兩種方法是將 Unicode 文本存儲為 2 個 或 4 個位元組序列的串. 這兩種方法的正式名稱分別為 UCS-2 和 UCS-4. 除非另外指定, 否則大多數的位元組都是這樣的(Bigendian convention). 將一個 ASCII 或 Latin-1 的文件轉換成 UCS-2 只需簡單地在每個 ASCII 位元組前插入 0x00. 如果要轉換成 UCS-4, 則必須在每個 ASCII 位元組前插入三個 0x00. 在 Unix 下使用 UCS-2 (或 UCS-4) 會導致非常嚴重的問題. 用這些編碼的字元串會包含一些特殊的字元, 比如 '\0' 或 '/', 它們在 文件名和其他 C 庫函數參數里都有特別的含義. 另外, 大多數使用 ASCII 文件的 UNIX 下的工具, 如果不進行重大修改是無法讀取 16 位的字元的. 基於這些原因, 在文件名, 文本文件, 環境變數等地方, UCS-2 不適合作為 Unicode 的外部編碼. 在 ISO 10646-1 Annex R 和 RFC 2279 里定義的 UTF-8 編碼沒有這些問題. 它是在 Unix 風格的操作系統下使用 Unicode 的明顯的方法. UTF-8 有一下特性: UCS 字元 U+0000 到 U+007F (ASCII) 被編碼為位元組 0x00 到 0x7F (ASCII 兼容). 這意味著只包含 7 位 ASCII 字元的文件在 ASCII 和 UTF-8 兩種編碼方式下是一樣的. 所有 >U+007F 的 UCS 字元被編碼為一個多個位元組的串, 每個位元組都有標記位集. 因此, ASCII 位元組 (0x00-0x7F) 不可能作為任何其他字元的一部分. 表示非 ASCII 字元的多位元組串的第一個位元組總是在 0xC0 到 0xFD 的范圍里, 並指出這個字元包含多少個位元組. 多位元組串的其餘位元組都在 0x80 到 0xBF 范圍里. 這使得重新同步非常容易, 並使編碼無國界, 且很少受丟失位元組的影響. 可以編入所有可能的 231個 UCS 代碼 UTF-8 編碼字元理論上可以最多到 6 個位元組長, 然而 16 位 BMP 字元最多隻用到 3 位元組長. Bigendian UCS-4 位元組串的排列順序是預定的. 位元組 0xFE 和 0xFF 在 UTF-8 編碼中從未用到. 下列位元組串用來表示一個字元. 用到哪個串取決於該字元在 Unicode 中的序號. U-00000000 - U-0000007F: 0xxxxxxx U-00000080 - U-000007FF: 110xxxxx 10xxxxxx U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx xxx 的位置由字元編碼數的二進製表示的位填入. 越靠右的 x 具有越少的特殊意義. 只用最短的那個足夠表達一個字元編碼數的多位元組串. 注意在多位元組串中, 第一個位元組的開頭"1"的數目就是整個串中位元組的數目. 例如: Unicode 字元 U+00A9 = 1010 1001 (版權符號) 在 UTF-8 里的編碼為: 11000010 10101001 = 0xC2 0xA9 而字元 U+2260 = 0010 0010 0110 0000 (不等於) 編碼為: 11100010 10001001 10100000 = 0xE2 0x89 0xA0 這種編碼的官方名字拼寫為 UTF-8, 其中 UTF 代表 UCS Transformation Format. 請勿在任何文檔中用其他名字 (比如 utf8 或 UTF_8) 來表示 UTF-8, 當然除非你指的是一個變數名而不是這種編碼本身.