关于Java中byte的问题,如何得到范围外字符的编码(我感觉有难度) 法文应该是ISO8859-1编码的。byte[] b = ....//从文件读出来的字节数组String s = new String(b,"ISO8859-1"); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你们说的方法我试过了还是不行!现在举个例子:十六进制的B0,后面的是“零”,换算成十进制是176,用Delphi可以得到一个摄氏度的那个小圈,现在怎样用JAVA显示! 如果楼主说的意思我没看错的话首先文本文件是法国通过Mail等方式传递到楼主手中的文本文件内容是在法国利用法语操作系统编辑保存的.如果我以上的结论正确的话分析:首先,操作系统保存文本文件时,会按操作系统默认字符集去保存例如在中文操作系统上是GBK, 英文系统上是ISO8859-1,日文系统上是MS932所以法文操作系统上保存的文件是按特定的字符集编码去保存的其次,要获得文件信息必须以正确的字符集编码去读取文件内容JAVA在执行中是以Unicode保存数据的,所以在程序中能正确察看到法文内容但是在程序输出到操作系统层的时候,又会按使用者操作系统默认的字符集编码去解析数据内容所以一般的乱码就是这样产生的我想楼主问这问题大概是要解决法文显示不正确的问题没看明白楼主到底读取文件后到底想干什么....private BufferedReader br ;private BufferedWriter bw ;public FileBeta(String pFilePath , boolean pRead) { this.read = pRead; try { if (pRead == true) { br = new BufferedReader(new InputStreamReader( new FileInputStream(pFilePath), "Unicode")); } else { bw = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(pFilePath, true), "Unicode")); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } }上面是一个读取/写入保存格式为Unicode文件的例子,希望有用... 谢谢wwalpha(尘埃) !等下我试试你的方法。今天我用RandomAccessFile这个类,来访问那个文件,竟然可以读出正常的法文,可就是找不到那个法文的编码,郁闷! 法文编码可以在默认语言为法语的机器上执行一行javaSystem.out.println(System.getProperty("file.encoding"));来实现输出的是默认语言编码 这几天把Java的Documentation给翻遍了,终于在I/O操作的流中找到合适的了,可以读取他们的十六进制编码,当然Java显示出来的时候打印的是十进制的。下面给出我的主要代码: File file = new File("ndrficj.dat"); InputStream is = new FileInputStream(file); DataInputStream dis = new DataInputStream(is); int i=0; while((i=dis.read())!=-1) { System.out.println(i); } dis.close(); is.close(); 这和我们平常对文件操作有所不同,使用的是数据流。 所要的法文正常是"N°6émér",原来用记事本打开显示的是"N?閙閞",读取的编码也不对。用上面读取文件的方式,显示的编码为: 78 176 54 233 109 233 114 用UltraEdit查看文件的十六进制编码显示的是"4E B0 36 E9 6D E9 72",现在换算后是正常的,问题解决,希望对大家以后碰见类似问题有所帮助。 主要是找不到免费的空间,不然可以把数据文件提供下载,大家可以测试。 关于后台html格式到前台原样显示的问题.. 创建一个子类对象的同时一定会创建 一个父类对象吗? oracle与sybase 数据移植到问题 基础知识的(1) 请教如何将上传的图片压缩为高清的缩略图? 算法题1道 急求 采用NIO实现一个网络通信程序,在Windows平台下调试好的代码在Linux平台会遇到问题 关于queryDataSet1的用法 求购JBUILDER4的例子!!!!!!!! 【特地回家找大神】String和StringBuffer效率和内存溢出问题 怎样监测用户在浏览器中的行为? 怎样获得本机的IP地址
现在举个例子:十六进制的B0,后面的是“零”,换算成十进制是176,用Delphi可以得到一个摄氏度的那个小圈,现在怎样用JAVA显示!
例如在中文操作系统上是GBK, 英文系统上是ISO8859-1,日文系统上是MS932
所以法文操作系统上保存的文件是按特定的字符集编码去保存的其次,要获得文件信息必须以正确的字符集编码去读取文件内容
JAVA在执行中是以Unicode保存数据的,所以在程序中能正确察看到法文内容
但是在程序输出到操作系统层的时候,又会按使用者操作系统默认的字符集编码去解析数据内容
所以一般的乱码就是这样产生的我想楼主问这问题大概是要解决法文显示不正确的问题没看明白楼主到底读取文件后到底想干什么....private BufferedReader br ;
private BufferedWriter bw ;public FileBeta(String pFilePath , boolean pRead) {
this.read = pRead;
try {
if (pRead == true) {
br = new BufferedReader(new InputStreamReader(
new FileInputStream(pFilePath), "Unicode"));
} else {
bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(pFilePath, true), "Unicode"));
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}上面是一个读取/写入保存格式为Unicode文件的例子,希望有用...
等下我试试你的方法。
今天我用RandomAccessFile这个类,来访问那个文件,竟然可以读出正常的法文,可就是找不到那个法文的编码,郁闷!
InputStream is = new FileInputStream(file);
DataInputStream dis = new DataInputStream(is);
int i=0;
while((i=dis.read())!=-1)
{
System.out.println(i);
}
dis.close();
is.close();
这和我们平常对文件操作有所不同,使用的是数据流。
所要的法文正常是"N°6émér",原来用记事本打开显示的是"N?閙閞",读取的编码也不对。用上面读取文件的方式,显示的编码为:
78
176
54
233
109
233
114
用UltraEdit查看文件的十六进制编码显示的是"4E B0 36 E9 6D E9 72",现在换算后是正常的,问题解决,希望对大家以后碰见类似问题有所帮助。
主要是找不到免费的空间,不然可以把数据文件提供下载,大家可以测试。