BufferedReader对象的readLine()方法读到的中文字符长度算1(而不是2),
请教有什么办法能把它转换成2且不会乱码..谢谢.我的代码
FileReader fr=new FileReader(path);
BufferedReader br=new BufferedReader(fr);
String record=null
while((record=br.readLine())!=null){
System.err.println(recode);
}
解决方案 »
- 整合struts、hibernate时的怪异问题:java.lang.ClassNotFoundException: org.jboss.logging.Bas
- 杜圃悟IT清明力荐 75种jquery特效 一键下载 用过挺好的
- 关于sql server 2005的连接问题
- 如何将获取的硬件地址以十六进制显示出来
- 连接oralce一定几率失败是啥问题?
- 弱弱地问,现在的电子商务类的网站多用什么写的?
- JSP 页面传值问题 (很急)
- jsp购物网站积分模块
- 简单问题,急需解决!
- mai函数中测试都正常,启动tomcat后就报错,努力很久无法解决,求大神帮个忙
- Struts1.3中的一个奇怪的问题
- jsp也JavaScript传参问题
我生成文件的时候是按固定格式的,即系每项有固定长度,不足补空,(没有分隔符),
我读文件的时候用substring()分隔,因为中文存的时候是按2个字节存的,但用
BufferedReader对象的readLine()方法读到的中文字符长度算1(而不是2),
所以长度就乱了,请问有什么办法解决吗?String FileName="D:\\workSource\\zhjm\\zhwcn\\WebContent\\form\\data\\1256549941000.txt";
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(sFileName),"GBK"));
String sLine=null;
while((sLine=br.readLine())!=null){
System.err.println("length="+sLine.length()+","+sLine.substring(0,16)+"-"+sLine.substring(16,18)+"-"+sLine.substring(18,41)+"-"+sLine.substring(41,53)+"-"+sLine.substring(53,54)+"-"+sLine.substring(54,64)+"-"+sLine.substring(64,82)+"-"+sLine.substring(82,91));
}
这样,就按你刚开始的字节给分解了。
如果你的长度是一样长的,那个stringByte数组的长度也应该都是一样长的。
再重新生成字符串就行了。String str = new String(byte[] bytes,"GBK");
有一个构造方法,可以很适合你的情况:
String(byte[] bytes, int offset, int length, Charset charset)
转换成UTF-8就变成乱码...望请高人指教.
我不是要取总长度...我是按substring方法来分隔取出来的每一行...
因为存的时候中文是占两个字节(由别人生成的文件),我取的时候中文占一个字节
所以就不能准确取值了..