Java 已知Java系统编码是GBK,jtextarea从一编码为Unicode的文本中读取数据,出现乱码,怎么正常显示?
关注:159 答案:2 mip版
解决时间 2021-02-03 12:45
提问者鉨瞞着所囿亾,爱着誰
2021-02-02 16:35
我觉得jtextarea中读取Unicode文本是先以Unicode编码,再以GBK解码,
而要想正常显示,应该再先以GBK编码,再以Unicode解码。不晓得对不对?
String codearray1=System.getProperty("file.encoding"); // Java系统编码
try{
String codetype=codeString(filePath); //检测获得原文本编码 filePath为文件路径
codearray1=codestr.getBytes(defaultcode); //以系统编码编码
ta.setText(new String(codearray1,codetype)); //以原文本编码解码
}catch(Exception e1){}
------------------------------------------------------------------- 网上的方法
private String codeString(String filePath) throws Exception{
BufferedInputStream bin = new BufferedInputStream(
new FileInputStream(filePath));
int p = (bin.read() << 8) + bin.read();
codetype = null;
switch (p) {
case 0xefbb:
codetype = "UTF-8";
break;
case 0xfffe:
codetype = "Unicode";
break;
case 0xfeff:
codetype = "UTF-16BE";
break;
case 0x5c75:
codetype = "ANSI|ASCII" ;
break;
default:
codetype = "GBK";
}
return codetype;
}
但仍然乱码:
操作前:
操作后:
按照“还是正能量”的方法,后面乱码了。。
我把code直接定为了Unicode,用的也是InputStreamReader(FileInputStream fis,String code)这个函数
-----------------------------------------------------------------------以下是代码
-------------------------------------------------------------------------实际效果
前面是可以了,但是后面还有很多方格。。。这要怎么做,不会要建一个方法,去掉后面的方格吧?但是如果编码对了,就应该不会有乱码了。。
要打开的文件确实是Unicode编码的,我也试了其他编码,
对 InputStreamReader bufr=new InputStreamReader(fis,"Unicode");
若将“Unicode”改为"UTF-8"、 "UTF-16BE" 、"ASCII" 、 "GBK"
前面又乱了,反倒乱码更严重。
改为其他编码后效果:
求大神解答。。谢谢~~
最佳答案
二级知识专家轉角離身
2021-02-02 17:55
不用那么麻烦,直接用InputStreamReader(FileInputStream fis,String code)这个函数来读取文本就可以了,code就是这个文本的编码
全部回答
1楼烈酒℃灼言EL
2021-02-02 19:01
用String类的一个构造函数, 它可以转换编码!
编码为Unicode的文本中直接给String
再看看别人怎么说的。
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
→点此我要举报以上信息!←
推荐资讯
大家都在看