Chinaunix首页 | 论坛 | 博客
  • 博客访问: 303475
  • 博文数量: 48
  • 博客积分: 2635
  • 博客等级: 少校
  • 技术积分: 495
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-16 18:07
个人简介

软件开发领域都关心。

文章分类

全部博文(48)

文章存档

2013年(1)

2012年(1)

2011年(4)

2010年(3)

2009年(4)

2008年(7)

2007年(13)

2006年(3)

2005年(12)

分类: Java

2010-02-20 11:21:33

参考网上的文章。
具体就不说了。就说我的经验。
1.对于中文来说utf8通常是3个字节存储。而utf16是2个字节存储,所以如果中文多的话还是utf16比较经济。而英文utf8是一个字节存储,所以如果英文多的话utf8比较经济。
2.java读取utf16比较简单,因为所有的字符都是两个字节的。
3. UTF16分为BE和LE,用iconv转换的-t UTF-16默认是UTF-16BE,java里面转换的时候也是"UTF-16"等同于"UTF-16BE"。Windows里面notepad里面的unicode是LE,unicode big endian是BE。
4. Java读取UTF-16BE的一小段代码。

public String read_UTF16BE(String resource, int start, int end) {

byte word_utf[] = new byte[1024];

String strReturn = "";

InputStream is;

int iRead = 0;

int maxLen = end - start;

int leftRead = maxLen;

int loopRead = 0;

try {

//System.out.println("Get file name " + resource);

is = getClass().getResourceAsStream(resource);

is.skip(start); //jump to start position

//loop to read file

do{

loopRead = leftRead > 1024?1024:leftRead;

iRead = is.read(word_utf, 0, loopRead );

//System.out.println("iRead " + iRead);

if(iRead <= 0){ //no more data in file, end of read

break;

}

String tmp = new String(word_utf, 0, iRead, "UTF-16BE");

strReturn = strReturn + tmp;

leftRead = leftRead - loopRead;

if(leftRead <= 0){ //no data left, end of read

break;

}

}while(iRead == 1024);

is.close();

} catch (IOException ex) {

System.out.println(ex);

}

return strReturn;

}

阅读(2167) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~