ISO-8859-1 编码

今天遇到一个编码的问题,8859-1。
这是一种西文编码方式,占8个字节,兼容ascii编码。

官方描述以及 演进历史
ISO/IEC 8859-1,又称Latin-1或“西欧语言”,是国际标准化组织内ISO/IEC 8859的第一个8位字符集。它以ASCII为基础,在空置的0xA0-0xFF的范围内,加入192个字母及符号,藉以供使用变音符号的拉丁字母语言使用。

法语及芬兰语本来也使用ISO 8859-1来表示。但因它没有法语使用的 œ、Œ、 Ÿ 三个字母及芬兰语使用的 Š、š、Ž、ž ,故于1998年被ISO/IEC 8859-15所取代。(ISO 8859-15同时加入了欧元符号)

ISO/IEC 8859-2 Latin-2或“中欧语言”,是国际标准化组织内ISO/IEC 8859的其中一个8位字符集  ISO/IEC 8859-3 南欧语言字符集  ISO/IEC 8859-4 北欧语言字符集  ISO/IEC 8859-5 是国际标准化组织内ISO/IEC 8859的其中一个8位字符集。此字集收录西里尔字母,供俄语、白俄罗斯语、保加利亚语、马其顿语、塞尔维亚语、乌克兰语使用。(哈萨克语及蒙古语尽管不是斯拉夫文字,但也使用西里尔字母书写)   ISO/IEC 8859-6 供现代阿拉伯语使用  ISO/IEC 8859-7 供现代希腊语使用  ISO/IEC 8859-8 供希伯来语使用  ISO/IEC 8859-9 是国际标准化组织内ISO/IEC 8859的其中一个8位字符集。它主要用以表示土耳其语及库尔德语文字。   这个字符集由ISO/IEC 8859-1演化而来,它把原属冰岛语的 Ð、ð、Ý、ý、Þ、þ 字母移走,换上 Ğ、ğ、İ、ı、Ş、ş 六个土耳其语字母。

对于我们而言,知道其是ascii的超集就可以了,8859是8位,而ascii是7位,其就是把ascii编码高位扩展了。

今天写了一个把8859-1转化为utf8的简单代码,仅供参考。
C代码:
#include #include #define LEN 20 int encode(unsigned char *src, unsigned char* dest) { unsigned int value; assert(src); value = *src&0xFF; if (value <= 0x7F) { *dest = *src; }else if(value >0x7F && value <= 0xFF)//110xxxxx 10xxxxxx { //char * temp = 0x3F&(*dest)|0x80; *dest = ((*src)>>6)&0x1F|0xC0; *(dest+1) = (*src)&0x3F|0x80 ; } //printf("%x%x/n",*dest); while(*dest) { printf("%x",*dest); dest++; } return 0; } int main() { unsigned char src[] = {138,17,0}; unsigned char dest[200] = {0}; encode(src,dest); return 0; }

java版本的
private static byte[] code8859toUTFNew(byte[] src){ byte [] dest = new byte[src.length*2 +1]; int i = 0, j = 0; int value; for(i =0; i < src.length;i++){ value = src[i]& 0xFF; //System.out.println("value="+value); if (value <= 0x7F) { dest[j++] = src[i]; }else if(value >0x7F && value <= 0xFF)//110xxxxx 10xxxxxx { Log.d(TAG, "charset value="+value); dest[j++] = (byte)((value>>6)& 0x1F|0xC0); dest[j++] = (byte)(value&0x3F|0x80); } } //System.out.println(j); byte [] end = new byte[j]; System.arraycopy(dest, 0, end, 0, j); Log.d(TAG, "charset number i="+i+",j="+j); return end; }

测试了几个代码目前表现还正常,欢迎大家拍砖。

附:8859-1编码表

你可能感兴趣的:(C,C++,Android,Java,Java,Develop,Android,Other)