Sun Java Solaris Communities My SDN Account Join SDN
 
Article

UTF-8 - What is it and why is it important?

 

Unicode è„㈣„Ÿè„ª绂„è„拌„拌„宠„拌矾娌″½•炉æ‹㈠㈣„ㄩ“†éœ茶„块²æ‹㈣„«è„™纰Œè„›è„ é“†褰•镁脫濞„è„«è„™椴è„よ„ㄨ²Œ娼žè„ヨ™è„佃„虫¢…è„х¢Œè„ラ²éœ插½•è„版‚椴è„拌„gœ‰éš†æ‹㈣„Œ濯’è„ èŽ芥‹㈠㈣„ㄩ“†éœ茶„块²æ‹㈠½•娌$¢Œè„› Web ç›茬‚‰è„Œè„Œè„姊…隆垄纰ŒèŽ借„宠„«è„«è„㈠½•镁娼žè„ヨ„¦è„›è„宠„伴º“濞„脌铆脫濞„è„«è„™椴è„よ„ㄨ²Œéœ插½•è„版‚椴è„° Unicode隆æ‹㈣„版‚椴è„° Unicode 纰Œè„›è™è„佃„虫¢…è„х¢Œè„ラ²æŽ崇œ‰è„Œ绡“æ‹㈡½žSolaris[tm] 虏è„佃„虫¢…绂„璺¯æˆ®椴éš†åž„Linux隆垄Microsoft[tm] Windows 2000 娼žè„¥ Apple's[tm] Mac OS X隆æ‹㈣„版‚椴è„° Unicode 纰Œè„›è„«濞„è„«è„™椴è„よ„ㄨ²Œè„ョ¯“椴æ‹㈤œ插½•è„›è„鸿„­è„疯„ュ㈣„ª绂„璧‚枚脦脛纰Œ纰Œè„拌„ㄨ„ц„­è„㈡ˆ®éœ茶„胯„拌„拌„«èŒ‚è„╄„­娼žè„ヨ„¦è„›è„宠„伴š†æ‹㈣„­è„烽œ茶„胯„«èŒ‚è„╄„­纰Œè„›æŽ崇Ÿ›楣胯Ц绂„璨Œè„¤„よ„ª纰Œ 绂„璺¯æˆ®椴è„拌„ㄦ‹㈠¢Unicode è„虫¢…脦陋è„ョ¯“è„«è„™è„宠„拌矾娌″½•炉纰Œè„›è„拌„磋„ªé™‹è„ㄨ„­è™绂„椹磋„℃½žæžšè„㈣„«éš†æ‹¢

éœ茶„­è„«è„疯„版‚椴è„伴œ茶„胯„«èŒ‚è„╄„­è„¦è„›纰Œ纰Œ纰Œè„›è„«濞„è„«è„™椴è„よ„ㄨ²Œæ‹㈠¢Unicode è„㈣„Ÿè„¦绡“脪绂„è„㈢¢Œè„«è„™纰Œè„›è„宠„拌矾娌″½•炉è„╅š†è„­甯介š†æ‹㈢¢ŒèЦè„㈣„Ÿæ‹㈠㈣„«濞„è„«è„™椴è„よ„ㄨ²Œ纰Œè„› Unicode åよ„胯„—姣›璺¯é™†è„㈤™†è„ 楹“è„«è„ㄩœ茶„胯„° è„伴š†æ‹㈠よ„胯„—姣›è„㈣„Ÿè„拌µ‚ Unicode 楹“ç…よ„—姣›纰Œè„›è„«椴è„$›叉‹㈠㈣µ‚脙脫椴è„$›茶„拌µ‚è„ц²Œ椹磋„¢º“蹇™楹“åž„纰Œè„›楹“ç…よ„—姣›纰Œ妤艰„¦绂„è„•姊…绂„璨ŒæŽ宠„h„¦绂„è„宠„伴™†è„疯„•姊…隆æ‹㈣„冲¯椴æ‹㈠½•娌$¢Œè„›åよ„胯„—姣›æŽ崇œ‰è„Œ绡“脪脭 è„ц„—褰•璧‚è„拌„版‹㈡½ž

  • UTF-8
  • UTF-16
  • UTF-32
脙椹磋„拌„板よ„胯„—姣›éœ插½•è„«è„ㄨ„ç›茶„«è„œè„ åょ¢ŒèŒ«éš†æ‹㈢¢ŒèЦè„㈣„Ÿæ‹㈠㈣„«è„ㄨ„ª绂„è„拌„板よ„胯„—姣›è„よ„村ゅ†’楣胯Œ«è„㈣„鸿„ è„ц„ュ㈤š†æ‹㈣„gœ‰æˆ®è„ヨ„㈣„Ÿ UTF-8隆拢 åゆˆ®è„¦è„›é™†èŠ¦é™†èŒ…è„¤„º UTF-8隆垄è„gœ‰è„㈣„Ÿè„㈣™è„™楹“隆垄脦陋è„㈣™è„™楹“è„gœ‰è„ èŽ介º“è„h„拌„磋„ªé™‹éš†æ‹¢

åら“† 1 éœ茬¯“脪姘“è„•è„h„ª绂„è„ㄦ¼è„­è„峰ゆˆ®è„¦è„›纰Œ纰Œè„拌„ㄨ„㈤箍脫脙纰Œè„›è„㈢Ž«è„«èŒ‚éš†æ‹¢

åら“† 1  è„ョ¯“è„«è„™éœ茬¯“脪姘“
 


è„宠„拌矾娌″½•炉 脦陋脛椴è„ㄦ¼è„›椹寸¢Œè„›éœ查…剁¦„茫褰•炉脭è„疯„ª绂„脝冒纰Œè„›è„宠„拌矾娌¤„iœ‰è„¨ 脦椴è„$¢Œè„›è„拌µ‚脕卯åら“†éš†æ‹¢
åよ„胯„—姣›è„宠„拌矾娌″½•炉 脪绂„è„拌„拌„«è„ㄨ„ㄨ²Œ纰Œè„›è„宠„拌矾娌″½•炉æ‹㈠㈢¢Œåよ„拌„ㄨ„™椹磋µ‚æžšè„宠„拌矾娌¢œ² 褰•è„«è„ㄨ„ª绂„璧‚æžš璺¯è„拌„œç›茬¢Œè„›è„®娌¤„㈠ª’è„扮¢Œéš†æ‹¢
脗姣›è„¦绂„ åよ„胯„—姣›è„宠„拌矾娌″½•炉è„拌„ㄨ„›椴璧‚æžšè„宠„拌矾娌$¢Œè„›è„®娌¤„㈠ª’è„扮¢Œéš†æ‹¢
è„宠„拌矾娌″よ„胯„—姣› è„拌µ‚è„ц²Œè„ª绂„è„宠Œ…è„宠„伴™†è„风¢Œè„›楹“ç…よ„—姣›è„«椴è„$›查š†æ‹¢
楹“ç…よ„—姣›纰Œ妤艰„¦绂„ åよ„胯„—姣›è„宠„拌矾娌$¢Œè„›纰Œ妤艰µ‚æžšæŽ宠„h„¦绂„è„宠„伴™†è„风¦„璨Œè„宠„伴™†è„烽š†æ‹¢
Charset 脪绂„è„宠Œ…脪è„╄„㈤箍脫脙è„宠„拌矾娌″よ„胯„—姣›é™†é…惰„ㄨ„ㄥよ„¿ 脗姣›纰Œè„›è„宠„拌矾娌¢š†æ‹㈣„ョ¯“椴æ‹㈣„虫¢…脦陋è„宠„拌矾娌″よ„胯„—姣›纰Œè„›è„ュ㈣„ª姘“楹“è„㈣„㈤箍脫脙隆拢

 

UTF-8 è„㈣„Ÿè„㈣™è„™楹“æ‹㈤┐

Unicode 3.1 脗姣›è„¦绂„纰Œè„›璺¯éœ茶„¦æ‚è„㈣„Ÿ U+0000 - U+10FFFF隆æ‹㈡ˆ®éš†楣胯„洪┐脤„ªè„­é™†èŠ¦è„™椹磋µ‚æžšè„—姣›è„¦绂„ 楹“蹇™楹“垄脦陋 32 脦绂„è„®娌¤„㈠ª’虏垄褰•脫脪脭虏è„佃„宠„绘‹㈠㈢¢ŒèЦè„㈣„Ÿæ‹㈠㈣™åž„璺¯è„Ÿè„ èŠ¦è„Ÿ璨Œè„™椹磋µ‚æžš纰Œè„磋矾陆éœ插½•绂„璋╄„•åž„褰•楹“è„­è„奸²è„¤„㈤箍脫脙 32 脦绂„纰Œè„›椹撮“†è„宠„拌矾娌″よ„胯„—姣›éš†æ‹㈣„ョ¯“椴æ‹㈡‹㈠㈣„¦姊…脜璺¯娼žè„ヨ„╄„Ÿè„拌„艰„板ºè„ヨŠ’纰Œè„›楣跨…ゅ½•脪脫脠脝ç›茶™绂„è„­è„奸²è„¤„®èŠ’è„╅œ‰è„虫žšæ‹㈠㈣„ª璨Œè„¦é™‹è„®èŠ’è„ㄦ¼楣跨…ゅ½•脪 椹磋„¤„ªè„­é™†èŠ¦è„ç›查º“芦è„ラ²è„宠„拌矾娌″½•炉纰Œè„›åよ„胯„—姣›è„gŽ«éœ茶„ょ¢Œé™†è„™椹磋µ‚æžšè„宠„拌矾娌¢™†æžšè„ª绂„璧‚æžšè„宠„伴™†è„烽š†æ‹¢

UTF-8 è„㈣„Ÿè„ª绂„è„拌„伴œ茶„胯„宠„伴™†è„峰よ„胯„—姣›æ‹㈠㈢¢Œåよ„拌„ㄨ„™椹磋µ‚æžšè„宠„拌矾娌$¢Œè„›åよ„胯„—姣›è„冲¯éœ茶„よ„¦é™‹è„ª绂„璧‚æžšè„宠„伴™†è„锋‹㈠㈣„冲¯椴é™‡è„¦é™‹è„h„›璧‚æžšè„宠„伴™†è„烽š†æ‹㈤º“璐搁œ茶„¿ è„㈠ª’脦姊…脜璺¯è„«èŒ‚è„╄„­纰Œè„›è„™椹磋µ‚æžšè„宠„拌矾娌¤„iœ‰è„ㄧŒ«纰Œè„›è„宠„伴™†è„疯„¤„佃„«è„疯„•陆璧‚枚隆æ‹㈣„Œ濯’è„ èŽ芥‹㈠㈣„­è„风¦„霉脫è„疯„Œ棰…éœ查š†è„¦è„›纰Œè„›è„¦è„›è„宠„拌„拌„ㄦ‹㈠㈣„™椹磋µ‚æžš è„宠„拌矾娌¤„é™†æˆ®éœ‰è„扮¦„è„ㄧŒ«è„ªé™‹ 1.1 璧‚æžšè„宠„伴™†è„烽š†æ‹㈣„ф‹㈣„ŒæŽ宠„«èŒ‚隆垄æŽ冲ž„脌棰…虏搴è„«èŒ‚隆垄è„ф‹㈣™搴è„Œ楹“脫茂娼žè„ラœ查“†è„«èŒ‚脝陆戮霉è„ㄧŒ«è„ªé™‹ 1.7 璧‚æžšè„宠„伴™†è„烽š†æ‹㈣„冲¯娼ž璐告‹㈠㈣„ è„®è„«èŒ‚隆垄椴ç‚‰è„ц„㈣„«èŒ‚娼žè„ヨ„拌„ㄨ„¦è„›纰Œè„›è„™椹磋µ‚æžšè„宠„拌矾娌¤„ョ¯“椴æ‹㈣„ㄧŒ«è„ªé™‹è„ 濯’璧‚æžšè„宠„伴™†è„烽š†æ‹¢ [1]

UTF-8 纰Œè„›åよ„胯„—姣›è„hŒ«璺¯绡“褰•璨Œ纰Œ妤艰„ªè„抽œ插ºéš†æ‹㈣„ц„—è„™蹇™纰Œè„›åら“† 2 è„g¢Œè„™姊…è„•è„£ Unicode 脗姣›è„¦绂„è„拌„ㄧ¢Œè„›éœ查•é™†é…惰„拌„è„¦绂„è„㈣„Ÿè„ èŽ芥½žè„¦æŽ宠™è„œè„œè„­è„疯™绂„è„ュ㈣„宠„拌矾娌¤矾éœ茶„¦æ‚纰Œè„›åよ„胯„—姣›è„拌„ㄩš†æ‹¢

åら“† 2  Unicode 脗姣›è„¦绂„纰Œè„› UTF-8 éœ查•é™†é…惰„拌„è„¦绂„åよ„胯„—姣›
 


è„宠„拌矾娌¤矾éœ茶„¦æ‚ éœ查•é™†é…惰„拌„è„¦绂„åよ„胯„—姣›
U+0000 - U+007F 0xxxxxxx
U+0080 - U+07FF 110xxxxx 10xxxxxx
U+0800 - U+FFFF 1110xxxx 10xxxxxx 10xxxxxx
U+10000 - U+10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

脠èŽ借„¤„уら“†è„iœ‰è„㈡ˆ®æ‹㈠㈣矾éœ茶„¦æ‚ U+0000 - U+007F è„拌„ㄧ¢Œè„›è„宠„拌矾娌¢┐脤„ªè„­åよ„胯„—姣›è„¦é™‹纰Œ妤艰„宠„伴™†è„烽š†æ‹㈣„®èŠ’æˆ®è„ヨ„ªèŠ’è„¦éœ茶„宠„œ ASCII è„宠„拌矾娌″½•炉脪脌戮è„¢┐脤„ªè„­è„«è„™纰Œ妤艰„宠„伴™†è„风¢Œè„›楹“蹇™楹“åž„椹磋„®褰•ç›茶„Œ楹“åら“†è„㈡ˆ®éš†æ‹㈣„ц„—脪绂„璧‚æžš璺¯éœ茶„¦æ‚ U+0080 - U+07FF æŽ崇œ‰娼žå㈣„•è„h„ç›茶„«è„胯„«è„¤„ èЦè„㈣„Œé™†èŽ介º“璐搁œ茶„胯„㈠ª’脦脛è„宠„拌„㈤箍脫脙纰Œè„›è„宠„拌矾娌℃‹㈠㈣™åž„æŽ崇œ‰娼žå㈣„•è„iº“é…惰矾垄脪涔ˆ璺¯娌℃½žè„œ纰Œè„›è„宠„拌矾娌¢š†æ‹㈤º“è„h矾éœ茶„¦æ‚ è„拌„ㄧ¢Œè„›è„™椹磋µ‚æžšè„宠„拌矾娌¤„ㄧŒ«è„ªé™‹è„•陆璧‚æžšè„宠„伴™†è„风¢Œè„›åよ„胯„—姣›楹“蹇™楹“åž„椹磋„®褰•ç›查š†æ‹㈣矾éœ茶„¦æ‚ U+0800 - U+FFFF è„拌„ㄨ„扮¢Œ纰Œè„™è„冲ž„脪芒纰Œè„›è„¦è„›è„宠„拌„㈣„Ÿè„拌„ㄨ„¦è„›éš†åž„椴ç‚‰è„ц„㈣„«èŒ‚娼žè„ヨ„ è„®è„«èŒ‚隆æ‹㈣„®èŠ’è„ㄦ¼è„¦è„›è„宠„拌„拌„ㄧ¢Œè„›è„™椹磋µ‚æžšè„宠„拌矾娌¤„ㄧŒ«è„ªé™‹è„ 濯’璧‚æžšè„宠„伴™†è„风¢Œè„› 楹“蹇™楹“åž„椹磋„®褰•ç›查š†æ‹㈣„冲¯娼ž璐告‹㈠㈣矾脟 BMP 璺¯éœ茶„¦æ‚æŽ崇œ‰娼žå㈢¢Œè„›è„㈣„Ÿ椹磋„¤„ªè„­è„虫¢…脦陋 UTF-16 è„拌„ㄧ¢Œè„›楹“ç…よ„Œé“†éœ茶„­ (surrogate pair) åら“†è„㈡ˆ®纰Œè„›è„宠„拌矾娌¢š†æ‹㈤º“è„h矾éœ茶„¦æ‚è„拌„ㄧ¢Œè„›楹“璐搁œ茶„胯„㈠ª’è„ㄨ„—è„宠„拌矾娌¤„㈣„Ÿè„拌„ㄨ„¦è„›è„ц锤è„ㄨ„¦è„¦è„›è„宠„伴š†æ‹㈤º“è„h矾éœ茶„¦æ‚è„拌„ㄨ„ㄨ„—éœ茬¯“脪姘“纰Œè„›è„宠„拌矾娌¤„­è„· UTF-8 åよ„胯„—姣›è„拌„ㄨ„ㄧŒ«è„ªé™‹è„h„›璧‚æžšè„宠„伴™†è„烽š†æ‹¢

虏ç…よ„$…¤ UTF-8 åよ„胯„—姣›è„宠„拌矾娌$¢Œè„›è„hŒ«璺¯绡“脝ç›茶„㈢¢Œ娼žè„哄½•璨Œ纰Œ妤奸š†æ‹㈣„ц„—è„™蹇™纰Œè„› Java 楹“ç…よ„—姣›è„g¢Œè„™姊…è„•è„h„ èŽ芥½žè„¦è„Ÿ璋╄„h„$¢Œè„撮º“楹“陆绡“è„宠„­褰•娼ž纰Œè„› UTF-8 åよ„胯„—姣›è„姊… [2]拢 娼ž

/**
* UTF-8. This algorithm works under the assumption that all
* surrogate pairs have already been converted into scalar code
* point values within the argument.
*
* @param ch an array of Unicode scalar values (code points)
* @returns a byte[] containing the UTF-8 encoded characters
*/
public static byte[] encode(int[] ch) {
// determine how many bytes are needed for the complete conversion
int bytesNeeded = 0;
for (int i=0; i<ch.length; i++) {
if (ch[i] < 0x80) {
++bytesNeeded;
}
else if (ch[i] < 0x0800) {
bytesNeeded += 2;
}
else if (ch[i] < 0x10000) {
bytesNeeded += 3;
}
else {
bytesNeeded += 4;
}
}
// allocate a byte[] of the necessary size
byte[] utf8 = new byte[bytesNeeded];
// do the conversion from character code points to utf-8
for(int i=0, bytes = 0; i<ch.length; i++) {
if(ch[i] < 0x80) {
utf8[bytes++] = (byte)ch[i];
}
else if (ch[i] < 0x0800) {
utf8[bytes++] = (byte)(ch[i]>> 6 | 0xC0);
utf8[bytes++] = (byte)(ch[i] & 0x3F | 0x80);
}
else if (ch[i] < 0x10000) {
utf8[bytes++] = (byte)(ch[i]>> 12 | 0xE0);
utf8[bytes++] = (byte)(ch[i]>> 6 & 0x3F | 0x80);
utf8[bytes++] = (byte)(ch[i] & 0x3F | 0x80);
}
else {
utf8[bytes++] = (byte)(ch[i]>> 18 | 0xF0);
utf8[bytes++] = (byte)(ch[i]>> 12 & 0x3F |
0x80);
utf8[bytes++] = (byte)(ch[i]>> 6 & 0x3F | 0x80);
utf8[bytes++] = (byte)(ch[i] & 0x3F | 0x80);
}
}
return utf8;
}

UTF-8 脦陋è„㈣™è„™楹“è„ èŽ介º“è„h„拌„磋„ªé™‹æ‹㈤┐

UTF-8 è„㈣„Ÿè„ª绂„è„拌„拌„拌„磋„ªé™‹纰Œè„›åよ„胯„—姣›æ‹㈠㈣„­棰…脪璨Œè„ èŽ借„ц„—æ‹㈡½ž
  • 脫姣› ASCII 褰•蹇™è„ è„»
  • 脠è„昏„ªè„宠„版‚椴è„°
  • éœ茶„­楹“璐搁œ茶„胯„㈠ª’脦脛è„宠„伴œ查…惰„╄„­é™†涔ˆ楹“è„®璧‚è„借„ㄦ‚
  • 脪è„宠„«è„烽º“濞„脌铆æ‹㈠㈤œ查…惰„ç›茶„gœ‰éœ茶„胯„宠„伴™†è„峰よ„胯„—姣›è„­璨Œé™†è„ц„›è„╅º“濞„脌铆
脭è„疯„冲¯é™†çœ‰è„«è„疯„цŒ«璧‚è„规ˆ®è„佃„ㄨ„ㄧ¢Œè„› Unicode 绂„璋╄„ªèŒ…脤„ф‹㈠㈣„«è„ㄨ„ª绂„褰•ç›查箍芦è„fˆ®è„g¢Œè™è„¤„«è„™ UTF-8 褰•璨Œ绂„炉脕è„i™†èŠ¦è„ç›茶™ç…よ„璺¯楹“ç…よ„—姣›è„Ÿ绡“脪脝纰Œé™† Unicode 纰Œè„›楣块™‡è„虫¢…隆æ‹㈣µ‚è„™楣胯Цè„fˆ®è™åž„脦楹“璧‚眉璧‚脛脝ç›茶™ç…よ„璺¯纰Œè„›楹“ç…よ„—姣›è„ªè„­è„版‚椴è„° 16 脦绂„绂„璨Œ 32 脦绂„椹撮“† Unicode è„宠„拌矾娌℃‹㈠㈤œ查…惰„㈣„Ÿè„╅š†è„­甯借„•è„£ UTF-8隆æ‹㈣„¦é™‹è„㈣™è„™楹“脪陋脮芒è„╅œ‰è„虫žšæ‹㈤┐璧‚è„™楣胯Цè„fˆ®è„g¢Œæ‹㈠㈣„¦é™‹è„•è„h„­è„疯„¦è„›åゆˆ®è„拌„ㄨ™èŒ…脮脪è„よ„撮œ茬¯“纰Œè„› ASCII è„宠„拌矾娌℃‹㈠㈣„gœ‰è„™è„Ÿ纰Œè„›è„х¢Œè„ラ²è„拌„ㄦŽ崇œ‰娼žå㈣„•è„iº“璐歌„•椹寸¢Œè„›è„«è™åよ„胯„—姣› (hard-coded) åよ„ é™†è„ц™è„佃„虫¢…隆æ‹㈣µ‚è„™楣胯Цè„fˆ®è™åž„脦楹“è„­è„疯™ç…よ„璺¯è„拌„ㄧ¢Œé™†楹“濞„è„ㄨ„艰µ‚è„›楹“ç…よ„—姣›æ‹㈠㈤œ查…惰„扮¦„è„㈣„Ÿé™†èŠ¦è„ç›茶„宠„拌矾娌″よ„胯„—姣›璧‚眉璧‚脛脦陋脫姣› ASCII 褰•蹇™è„ è„荤¢Œè„› UTF-8隆æ‹㈢¦„绂„è„╄„­è„板ºæ‹㈠㈢¢Œ妤艰„宠„伴™†è„· ASCII è„宠„拌矾娌$¢Œè„›åよ„胯„—姣›è„扮¢Œè„­è„· UTF-8 è„拌„ㄥゆ‹㈣„•涔ˆè™绂„åょ›查š†æ‹㈣„Œ濯’è„ èŽ芥‹㈠㈣„«è„™è„«è„峰½•矛虏茅 '\' 纰Œè„›楹“ç…よ„—姣›椹磋„¤„ªè„­褰•è„よ„ㄩ…跺½•矛虏茅è„宠„伴™†è„疯„扮¢Œ 0x5C æ‹㈠㈤œ查…惰™绂„è„㈣„Ÿé™†èЦ楹“ç…よ„—姣›璧‚眉璧‚脛脦陋褰•矛虏茅 0x005C隆 æ‹㈣„ㄨ„艰µ‚è„›è„″ž„虏褰•è„­è„峰½•璧‚脟搂è„ㄨ„ㄨµ‚姊…è„拌„伴º“ç…よ„—姣›è„板ºè„拌„ㄧ¢Œè„›褰•璧‚æŽ宠„佃„ㄨ„ㄨ„¦è„›åゆˆ®楹“濞„脌铆楹“ç…よ„—姣›è™绂„纰ŒèЦ璺¯è„╄„㈠ゆ‹㈠㈤œ查…惰„Ÿè„ªè„ è„昏„ªè„抽²æžš楹“铆隆 æ‹㈣„«è„ㄨ„㈠ゆ½ž璨Œæ‹㈠㈣„ªé™‹è„ф¯›è„­è„疯„Œè„ц„㈤™†è„«濞„è„«è„™椴è„よ„ㄨ²Œè„拌„ㄨ„よ癌楣挎¼绂„霉åゆˆ®褰•éœ茬¢Œè„› Unicode è„版‚椴è„版‹㈠㈣„╅š†è„­甯½ UTF-8 åよ„胯„—姣›è„㈣„Ÿè„冲¯è„ è„昏„ªè„虫½žè„ヨ„冲¯æˆ®è„介²è„″ゆˆ®è„ㄦ‚脪蹇™纰Œè„›璺¯é™†璺¯绡“隆拢

楹“璐搁œ茶„胯„㈠ª’è„«濞„è„«è„™椴è„よ„ㄨ²Œéœ插½•è„«è„ㄧ¦„霉åゆˆ®纰Œè„›è„¦è„›åゆˆ®楹“濞„脌铆è„hŒ«璺¯绡“隆æ‹㈣„ㄩ“†éœ茶„胯„®èŠ’è„ㄦ¼è„hŒ«璺¯绡“éœ茶„­è„宠„拌矾娌$¢Œè„›楹“蹇™楹“åž„椹´ 脮褰•ç›茶„ㄧŒ«è„Ÿ璐哥¢Œè„›褰•è„佃„$Œ«éœ插½•è„«è„ㄨ„ åょ¢ŒèŒ«éš†æ‹㈣„Œ濯’è„ èŽ芥‹㈠㈣„ㄩ“†éœ茶„垮よ„块²è„よ„ è„h„­åらœ插½•褰•è„佃„$Œ«è„ª绂„璧‚æžšè„宠„拌矾娌¤„扮¦„è„ㄧŒ«è„ªé™‹è„ª绂„璧‚æžšè„宠„伴™†è„风¢Œè„›楹“ 蹇™楹“åž„椹磋„®褰•ç›查š†æ‹㈣„•铆脪绂„璧‚æžš椴æ‹㈠½•娌$¢Œè„›褰•è„佃„$Œ«è„㈣„Ÿæ‹㈢¯“è„よ„村ゅ†’è„㈣„Ÿéœ茶„­è„«è„· C 脫茂è„╄„­纰Œè„›åよ„块²è„よ„ è„h„­åゆ‹㈡¼æ‹㈠㈣„¦è„›åゆˆ®è„宠„拌矾娌¢º“搴è„«è„Œè„­éœ茶™绂„绂„璋╂Ž崇œ‰娼žå㈣„扮¢Œ 0x00隆æ‹㈣„ èŽ介箍娌¢º“è„h„扮¢Œè„®蹇™纰Œè„›椴 枚è„ц„版‹㈠㈣„gœ‰è„ョ¯“椴æ‹㈠ら”š褰•脟纰Œè„›è„㈣„Ÿè„¦è„›åゆˆ®è„宠„拌矾娌¢º“搴纰Œè„›è„›婕è„¦è™éš†æ‹㈣„у附 UTF-16 娼žè„¥ UTF-32 纰Œè„›åよ„胯„—姣›é™†èЦè„宠„拌矾娌¢º“蹇™楹“垄脦陋 16 绂„璨Œ 32 脦绂„è„扮¢Œéš†æ‹㈢¢Œå¤ 16 绂„璨Œ 32 脦绂„è„扮¢Œ纰Œè„›è„宠„拌矾娌¢º“搴åょ¦„è„虫¢…脦陋脪绂„è„宠Œ…è„宠„伴™†è„疯„扮¢Œ楹“濞„脌铆è„㈠ゆ‹㈠㈣„扮¢Œ 0x00 è„ョ¯“椴æ‹㈢¦„璋╅²æžšè„ц„版‹㈠㈣„よ„村ゅ†’è„㈣„Ÿè„­è„风¦„霉脫è„疯„Œ棰…éœ查š†è„¦è„›纰Œè„›è„¦è„›è„宠„拌„拌„ㄩš†æ‹㈣„®èŠ’è„㈤箍è„ц„拌„«è„ㄧ¢Œè„›è„¦è„›åゆˆ®楹“濞„脌铆è„hŒ«璺¯绡“åょ›茬¢Œè„™璧‚楹“è„­è„«娼žè„¥ 绂„矛脗脪æ‹㈠㈤º“è„«éœ查…剁¢Œ褰•è„拌„—è„宠„拌矾娌¢º“搴椴é™‡éœ茶„ 褰•脝è„hŒ«楹“铆脦璐搁š†åž„椴æžšè„ц„拌„蹇™楣胯„拌„•å㈤™†è„«纰Œè„›è„宠„拌矾娌¢º“搴è„ªè„­褰•æŽ宠„h„╄„f¢…è„㈡‚æŽ宠„洪š†æ‹㈣„•铆脪绂„ 璺¯é™†è„™蹇™æ‹㈠㈣„«è„¤„«è„· UTF-8 纰Œè„›绂„霉åゆˆ®楹“ç…よ„—姣›纰Œ妤艰„¦绂„è„㈣„Ÿè„宠„伴™†è„锋‹㈠㈣„ª璨Œ楹“è„iº“芦è„ラ²纰Œè„›è„hŒ«璺¯绡“è„ョ¯“椴æ‹㈣„扮¦„è„ㄧŒ«è„虫¢…脟璋╄„¦åž„纰Œ姊…è„®娌℃‹㈢¯“è„ èŽ介箍娌¤„«è„ㄧ¢Œè„›绂„æŽ虫‹㈡¼褰•楹“椹磋„¡ 脭è„h„ㄨ„ㄩš†æ‹¢

Unicode 纰Œè„›è„ª绂„璧‚æžš椴æ‹㈣„¦é™‹è„ è„h„疯µ‚虏隆è„板º楹“濞„è„㈣„Ÿæ‹㈠㈤œ茶„­è„«è„风¦„霉脫è„疯„Œ棰…éœ查š†è„¦è„›纰Œè„›è„¦è„›è„宠„版‹㈠㈣„gœ‰è„ㄧŒ«è„ªé™‹纰Œè„›椹磋„®褰•ç›插よ„ 楹“芦è„ラ²åよ„胯„—姣›è„ªé™‹éœ茶„¿ 纰Œè„™éœ茶„块š†æ‹㈢¦„绂„è„╄„­è„板ºæ‹㈠㈤œ茶„­è„«è„烽º“璐搁œ茶„胯„㈠ª’è„宠„拌矾娌℃‹㈠¢UTF-16 绂„璨Œ UTF-32 è„ㄧŒ«è„ªé™‹ 16 绂„璨Œ 32 脦绂„纰Œè„›楹“蹇™楹“åž„椹磋„®褰•ç›叉‹㈠㈤œ查…惰™绂„è„㈣„Ÿ ISO-8859 åよ„胯„—姣›è„х¢Œè„•è„ㄨ„iœ‰è„ㄧŒ«纰Œè„›è„ª绂„璧‚æžšè„宠„伴™†è„烽š†æ‹㈢¢ŒèЦè„㈣„Ÿæ‹㈠¢UTF-8 椹磋„¤„ªè„­è„­è„疯„ª绂„璧‚æžšè„宠„伴™†è„疯„拌„ㄦˆ®è„ヨ„›è„洪º“蹇™楹“åž„è„iœ‰è„«è„ㄨ„®èŠ’è„ㄦ¼è„宠„拌矾娌″½•炉 (charset) 纰Œè„› ASCII è„宠„«褰•炉隆拢ASCII è„宠„«褰•炉脦è„艰„ªè„¤„㈣„Ÿè„¦姊…脜璺¯娼žè„ヨ„™è„Œè„拌„艰„«èŒ‚è„╄„­è„冲¯椴æ‹㈣„«è„™纰Œè„›è„宠„拌矾娌″½•炉隆æ‹㈣„ èŽ借„ŸæŽ宠„iœ‰è„㈡žšæ‹㈠㈤œ茶„­è„«è„烽º“璐搁œ茶„胯„㈠ª’脦姊…脜璺¯è„«èŒ‚è„╄„­æ‹㈠㈣„™椹´ 璧‚æžšè„宠„拌矾娌¤„é™†æˆ®éœ‰椹磋„¤„ªè„­è„«è„™ 1.1 璧‚æžšè„宠„伴™†è„疯„Œ楹“åよ„胯„ㄩº“隆æ‹㈣„®èŠ’褰•璧‚娼žçŽ«楹“茂纰Œé™†è„•è„£ ASCII 纰Œè„›è„ㄦ‚è„—è„㈤š†æ‹㈢¢ŒèŠ¦è„­è„峰よ„磋„ªé™‹è„㈠ゆ‹㈠㈤œ茶„­è„«è„锋½žåゅ½•娌$¢Œè„›è„宠„拌矾娌℃½žè„ョ¦„è„艰„″㈡½žå㈡½ž濯’纰Œè„›è„¦è„›è„宠„版‹㈠¢UTF-8 脭è„㈣„ㄩ“†è„™椹磋µ‚æžšè„宠„拌矾娌$¢Œè„›åよ„胯„—姣›椴é™‡楹“茂è„h„›璧‚æžšè„宠„伴™†è„烽š†æ‹¢

戮隆楣胯„鸿„ㄩ“†éœ茶„胯„ㄨ„—纰Œè„›椹撮™‹璺¯åž„è„у¯è„›椹磋„╄µ‚è„h„佃™è„¤„«è„™è„•è„£ Unicode è„虫¢…脦陋åら”šè„冲½•æ‹㈠㈢¢ŒèŠ¦æˆ®è„$¢Œè„›è„у¯è„›椹磋„ョ¯“椴æ‹㈣„㈤箍脫脙è„版‚椴è„拌„ª绂„è„ㄩš†è„宠Œ…è„ц„块箍è„磋„«èŒ‚è„╄„­纰Œè„›楹“芦è„ラ²è„宠„拌矾娌″½•炉隆æ‹㈣„宠„㈣„″¯纰Œè„›楣跨…ゅ½•è„㈢¦„炉 娼žè„ュゆˆ®纰Œè„寸¦„炉楣块™‡椴è„よ„㈠¨„绂„璋╁½•脟纰Œè„™è„¦é™‹è„•è„iº“濞„脌铆隆æŽ崇¢Œ妤艰„宠„伴™†è„烽š†åゆ½žè„ラš†æŽ抽œ茶„胯„宠„伴™†è„烽š†åよ„宠„拌矾娌″½•炉éœ查…惰µ‚眉è„ㄨ„—脦脛åゆˆ®楹“濞„脌铆è„hŒ« 璺¯绡“隆æ‹㈣„›ç…よ„㈣„Ÿ璺¯甯界¦„楣垮½•脟纰Œè„™è„¦é™‹è„•è„h„­è„烽º“濞„脌铆楣垮ª’椴è„よ„拌„ㄥ½•矛虏茅隆æŽ宠„ŸæŽ崇¢Œ褰•隆åよ„宠„伴™†è„锋½žè„ラ┐脤„›è„虹¢Œè„›éš†æŽ宠„¦è™è™椹撮š†åよ„宠„伴™†è„烽œ查…惰µ‚眉 è„ㄨ„—楹“ç…よ„—姣›æ‹㈤┐è„㈣„Ÿ璺¯甯界¦„楣垮½•脟纰Œè„™æ‹㈠㈣„ èŽ介箍娌¤„¦è„›åゆˆ®è„拌„ㄧ¢Œè„›è„f¢…脪濯’楹“濞„è„«è„疯„ è„¦è„ªèŠ’è„¦绂„è„拌„™æ‹㈠㈣„ªé™‹è„®è„ª纰Œé™†è„›椴璧‚æžšè„宠„拌矾娌$¢Œè„›椹撮™‹è„㈠½•脦绂„ è„拌„™è„«è„ㄩœ茶„胯„Œæ‚è„›è„╂‹㈤┐脭è„疯„«è„ㄨ„ㄦ¼åよ„胯„—姣›è„拌„ㄦ‹㈠㈤º“蹇™è„­è„疯„宠„œè„¦è™è™椹磋„宠„伴™†è„疯„ªè™椹磋„¤„›è„鸿„㈣„Ÿè„ŸæŽ崇¢Œ褰•è„宠„伴™†è„风¢Œè„›è„¦è„㈣„よŠ’éš†æ‹㈣„Œ濯’è„ èŽ芥‹㈠¢ Shift-JIS åよ„胯„—姣›æˆ®è„ヨ„ª璨Œ楹“è„h„­棰…脪璨Œéœ查…惰„›è„╄„«è„疯„›蹇™è„ц²Œ楹“濞„脌铆隆拢

纰Œå¤ Unicode è„虫¢…脦陋楣胯„らœ茬¯“椹撮“†éœ茶„ 纰Œè„› 16 脦绂„åよ„胯„—姣›椹磋„¢箍婕è„㈤箍脫脙è„㈠ゆ‹㈠㈣„ㄩ“†éœ茶„胯„ è„h„­è„疯„ㄨ„h矾è„鸿„板ºè„«è„块œ插½•虏绂„è„­è„佃„㈤箍脫脙éœ茶„胯„宠„伴™†è„峰よ„胯„—姣›è„•è„iš†æ‹㈤┐脤„ªè„­è„Œé“†é™†èŠ’纰Œè„›è„㈣„Ÿæ‹㈠¢ 脫脤„«è„疯„­è„疯„㈤箍脫脙éœ茶„胯„宠„伴™†è„疯„╄„Ÿè„拌„艰„宠„拌矾娌″½•炉è„㈠ら┐脤„›è„鸿„«æžš纰Œé™†è„•è„h„拌„拌„拌„拌„—茅璺¯椴æ‹㈠㈣„›ç…らœ茶„­è„㈣„Ÿ璺¯甯借™è„¤„«è„™éœ茶„胯„宠„伴™†è„· Unicode åよ„胯„—姣›椹磋„¤„›è„虹¦„璋╄„«è„よ„­妤艰™绂„戮枚隆æ‹㈢¢ŒèЦè„㈣„Ÿæ‹㈠¢UTF-8 虏绂„è„ュ㈡‹㈠㈣„gœ‰è™绂„绂„璋╄™ç…よ„$…よ„›è„Ÿè„ㄦ¼楹“芦è„ラ²åよ„胯„—姣›绂„璋╄™ç…よ„$…ょ¢Œè„›è„iœ‰è„«è„ㄨ„¦è„㈣„よŠ’éš†æ‹㈣„Œ濯’è„ èŽ芥‹㈠㈣„­è„疯„¦è„›åゆˆ®è„宠„拌矾娌¢º“搴è„拌„ㄦ‹㈠㈤º“脫脠脦 脪芒脦绂„è„拌„™è„╂Ž宠„®è„ªè„›椴璧‚æžšè„宠„拌矾娌$¢Œè„›椹撮™‹è„㈠½•脦绂„è„拌„™绂„璋╁ょ›茬¢Œè„™娼žè„鸿„ è„昏„ªè„抽š†æ‹¢UTF-8 è„宠„拌矾娌¤„ㄨ²Œè„•è„ㄧ¢Œè„›è„iœ‰è„¦é™†éš†æŽ宠„¦è™è™椹撮š†åよ„宠„伴™†è„疯„宠„鸿„㈣„Ÿæˆ®è„借„«è„¨ 10xxxxxx 纰Œè„›è„¦绂„è„›æ‹㈣„㈤™†æ‹㈠㈣„ª璨Œ楹“è„f½žè„鸿„ è„昏„ªè„虫ˆ®è„ヨ„›è„洪º“è„«娼ž璐歌„ラœ‰è„ŸæŽ宠„®è„ª纰Œé™†è„›椴璧‚æžšè„宠„拌矾娌$¢Œè„›椹撮™‹è„㈠½•脦绂„è„拌„™éš†æ‹㈣„宠„拌矾娌¤„拌µ‚è„®姣›è„拌„•éœ茶„胯„«姣›è„宠„° 璺¯娌¢┐陋è„㈠½•脦绂„è„拌„™è„ц„胯µ‚涔ˆè„ 濯’璧‚æžšè„宠„伴™†è„烽š†æ‹㈠½•楹“è„㈤箍éœ茶„­è„«è„烽º“璐搁œ茶„胯„㈠ª’è„╄„Ÿè„拌„艰„ц锤è„ㄨ„¦è„¦è„›è„宠„版‹㈠㈣„拌„•éœ茶„胯µ‚涔ˆè„•陆璧‚æžšè„宠„伴™†è„锋ˆ®è„ョ¦„璋╃¢Œé™† 楹“茂è„宠„拌矾娌″よ„介™†èŽ介š†æ‹㈣„ュ½• 1 è„ц„­è„㈡ˆ®è„•è„e½•璧‚璧‚æžšè„宠„拌矾娌″½•æŽ宠„ç›² UTF-8 åよ„胯„—姣›éš†æ‹㈣„Ÿ姣›è„冲ž„脪芒æ‹㈠㈣„㈠ºè„•霉陆é…惰„拌„è„宠„伴™†è„风¢Œè„›è„i²è„ㄨ²Œè„㈣„Ÿ E5隆垄AD隆垄 97隆 æ‹㈣„ èŽ介箍娌¤„ªé™‹è„Ÿ璐搁º“è„«åら”š褰•脟脦陋 1 纰Œè„›è„¦绂„è„拌„™椹撮™‹è„㈠½•è„╂Ž宠„®è„ªè„宠„拌矾娌$¢Œè„›椹撮™‹è„㈠½•脦绂„è„拌„™æ‹㈠㈣„¦è„ªè„™è„Ÿ椹磋„¤„ªè„­æŽ抽º“脮脮脪脭è„ц„—è„iœ‰è„㈡žšæ‹㈠㈣„­è„疯„ュ½•è„拌„ㄨ„®è„ª纰Œé™†è„¦绂„è„«è„疯„¦绂„è„拌„™ 2 纰Œè„›è„宠„拌矾娌″よ„介™†èŽ芥‹㈡½ž

  1. 纰Œåよ„ŸæŽ宠„宠„伴™†è„疯„㈣„Ÿ璺¯甯借„ªè„­è„¦绂„è„›æ‹㈣„㈤™† 10xxxxxx 椹撮™‹è„㈠½•æ‹㈤┐
  2. 脠èŽ介箍娌¤„㈣„Ÿæ‹㈠㈣„ц²Œè„宠锤脪脝虏垄è„抽™‹è„拌„•虏陆è„扮Œ« #1隆拢
  3. è„ラ”š椴è„¢š†æ‹¢
è„ュ½• 1     è„╂Ž宠„®è„ªè„宠„拌矾娌″よ„介™†èŽ借„ц„块œ茶„­é™†è„у½•璨Œ纰Œ妤¼

脫姣›è„›椴è„ㄦ¼楹“芦è„ラ²è„宠„拌矾娌″よ„胯„—姣›è™绂„è„ュ㈡‹㈠㈣„㈤箍脫脙 UTF-8 璺¯è„Ÿ椴æ‹㈣„ è„昏„ªè„抽™†èŠ’è„¦æžš娼žè„ヨ™è„佃„宠„昏„宠„拌矾娌¢š†æ‹㈣„®èŠ’è„拌„板よ„胯„—姣›纰Œè„›è„¦绂„è„›æ‹㈣„㈤™†è„㈤箍脛ç…ら┐脤„ªè„­è„╄µ‚è„h„佃„ 璺¯éœ茬¯“è„宠„拌矾娌¤„f¢…脪濯’è„㈣„Ÿè„拌µ‚è„ц²Œè„宠„° 璺¯娌$¢Œè„›椹撮™‹è„㈠½•脦绂„è„拌„™绂„楣胯„㈣„Ÿè„拌µ‚è„ц²Œåゅ†’纰Œè„›è„¦绂„è„拌„™éš†æ‹㈣„­è„疯„宠„拌矾娌¢º“搴è„拌„ㄨ„ц²Œè„ŸæŽ崇¦„璨Œè„ц²Œ娼ž璐歌„ªè„éœ茬‚‰éœ插½•娼žè„鸿„ è„昏„ªè„抽š†æ‹¢

è„宠„洪™†璋©

UTF-8 è„㈣„Ÿè„ª绂„è„拌„伴™†涔ˆ楹“è„®璧‚è„借„ㄦ‚纰Œè„› Unicode åよ„胯„—姣›éš†æ‹㈣„®èŠ’è„拌„板よ„胯„—姣›é™†èЦ Unicode 楹“ç…よ„—姣›è„扮¢Œ纰Œè„›è„¦绂„è„›æ‹㈣„㈤™†璺¯è„拌™褰•è„«è„疯„ª绂„璧‚枚隆垄脕陆璧‚枚隆垄脠濯’璧‚æžšè„$Ž«è„拌„•è„h„›璧‚æžšè„宠„伴™†è„疯„拌„ㄩš†æ‹㈣„®èŠ’è„㈣„Ÿè„ª绂„è„拌„伴œ茶„胯„宠„伴™†è„峰よ„胯„—姣›éš†æ‹¢

UTF-8 è„扮¦„è„㈤箍脫脙脪绂„璧‚æžšè„宠„伴™†è„烽œ茶„­ ASCII 陆é…惰„ㄨ„ㄥよ„胯„—姣›éš†æ‹㈣„®èŠ’æˆ®è„ュら“†è„㈡ˆ®æ‹㈠㈤œ茶„­è„«è„疯„㈤箍脫脙绂„霉脫è„疯„Œ棰…éœ查š†è„¦è„›纰Œè„›è„¦è„›è„宠„扮¢Œè„›è„«èŒ‚è„╄„­æ‹㈠㈣„™椹磋µ‚æžšè„宠„拌矾娌¤„é™†æˆ®éœ‰椹磋„¤„ªè„­è„扮¦„è„«è„™ 1.1 璧‚æžšè„宠„伴™†è„峰ら“†è„㈡ˆ®éš†æ‹㈣„ç›茶„gœ‰è„«èŒ‚è„╄„­纰Œè„›è„™椹磋µ‚æžšè„宠„拌矾娌¢┐脤„›è„鸿„ㄧŒ«è„ªé™‹éœ茶„胯µ‚æžšè„宠„伴™†è„烽š†æ‹㈣„«姣› UTF-16 è„ц„垮よ„ æ‹㈠㈣„­è„· UTF-8 è„拌„ㄦ‹㈠㈣„扮¦„è„«è„ㄨ„╄„Ÿè„拌„艰„¦è„›è„宠„扮¢Œè„›åよ„胯„—姣›椹撮™‹è„х…ょ¦„璋╁よ„ é™†è„чº“璐搁š†æ‹¢

UTF-8 éœ茶„­è„«è„疯„ф¯›è„版‚椴è„° Unicode 纰Œè„›è„Œè„ц„㈤™†è„х¢Œè„ラ²娼žè„鸿„«è„ㄨ„«è„™æ‹㈠㈣„®èŠ’è„㈣„Ÿè„ª璨Œè„¦é™‹椹撮™‹璺¯åž„è„ è„h„­åよ„¦è„艰„ㄧŒ«楹“璐歌矾霉è„ㄨ„艰µ‚脛脦脛åゆˆ®楹“濞„脌铆楹“ç…よ„—姣›éš†æ‹㈤œ茶„­è„«è„疯™è„¤„«è„™纰Œ妤艰„宠„° 陆è„烽º“ç…よ„—姣›纰Œ妤艰„¦绂„纰Œè„›楹“ç…よ„—姣›æ‹㈠㈣„­è„· UTF-8 脦脛åゆˆ®éœ查…惰矾脟 ASCII 脛è„h„拌„• Latin-1 脦脛åゆˆ®纰Œè„›è„ŸèŒ…椹存žšè„ц„—æ‹㈠㈣„®èŠ’è„ㄦ¼楹“ç…よ„—姣›è„ョ¯“椴æ‹㈣™绂„绂„璋╄„ラ”šè„ èЦè„㈡‚è„ㄦ‚隆拢

è„冲¯娼ž璐告‹㈠㈣„«姣›è„›椴è„ㄦ¼楹“芦è„ラ²åよ„胯„—姣›è™绂„è„ュ㈡‹㈠㈣„㈤箍脫脙 UTF-8 璺¯è„Ÿ椴æ‹㈣„ è„昏„ªè„抽™†èŠ’è„¦æžšè„宠„拌矾娌¢š†æ‹㈣„iœ‰è„¦é™†纰Œè„›è„ŸæŽ崇¢Œ褰•娼žè„ヨ„¦è™è™椹磋„宠„伴™†è„锋½žè„鸿„ è„昏„ªè„虫ˆ®è„ヨ„›è„鸿„㈤œ插ゅ†’椴æžšè„Œ楹“隆æ‹㈣„«姣›è„ç›茶„gœ‰è„ㄩ“†éœ茶„块œ茶„胯„宠„° 陆è„峰よ„胯„—姣›è„ц„垮よ„ æ‹㈠㈣„­è„· UTF-8 è„拌„ㄦ½žè„鸿„ è„昏„ªè„宠„­è„疯„¦è„›åゆˆ®è„宠„拌矾娌¢º“搴è„拌„ㄨ„ц²Œè„ŸæŽ崇¦„璨Œè„ц²Œ娼ž璐歌„ªè„éœ茬‚‰éš†æ‹¢


[2] This code has not been optimized for size or speed.

漏 2001 John O'Conner. John O'Conner is a staff engineer specializing in Java internationalization.
Related Links