黑马程序员技术交流社区
标题:
IO的编码问题
[打印本页]
作者:
caijunsong
时间:
2014-4-19 12:36
标题:
IO的编码问题
本帖最后由 caijunsong 于 2014-4-19 12:44 编辑
public static void main(String [] args) throws Exception
{
String strChina = "中国";
//这里放回的是length()返回的是2,两个字符串
for(int i=0;i<strChina.length();i++)
{
System.out.println(Integer.toHexString((int)strChina.charAt(i)));
}
byte [] buf=strChina.getBytes("gb2312");
for(int i=0;i<buf.length;i++)
{
System.out.println(Integer.toHexString(buf[i]));
}
System.out.println(strChina);
}
//张老师关于编码问题说:在java中字符使用的都是unicode编码,就是所有不管中文或字母都是两个字节
//但是我把上面的gbk2312改成unicode 它的length却是6.怎么解释
//就是我们java程序中的中文是采用UNICODE(全球)?但是记事本却是gbk编码(本地)?
//因此把一个中文文件,用记事本打开 会出现乱码??
//如果自己有比较总结 请复制链接给我 谢谢!!
复制代码
作者:
月光海
时间:
2014-4-19 12:48
1个字节是8个二进制位,而byte就是8个二进制位,1个汉字是16位,也就是两个汉字是4个byte,然后unicode是用三个byte表示一个汉字的,自然你改成unicode编码length就是6了,如果你程序中指定了是用unicode编码,那么记事本打开的时候它会去读取存储的信息的头部,来判断是以哪种方式存储的,就用哪种方式取出
作者:
左拉
时间:
2014-4-19 18:20
1、JAVA读取文件,避免中文乱码。
/**
* 读取文件内容
*
* @param filePathAndName
* String 如 c:\\1.txt 绝对路径
* @return boolean
*/
public static String readFile(String filePathAndName) {
String fileContent = "";
try {
File f = new File(filePathAndName);
if(f.isFile()&&f.exists()){
InputStreamReader read = new InputStreamReader(new FileInputStream(f),"UTF-8");
BufferedReader reader=new BufferedReader(read);
String line;
while ((line = reader.readLine()) != null) {
fileContent += line;
}
read.close();
}
} catch (Exception e) {
System.out.println("读取文件内容操作出错");
e.printStackTrace();
}
return fileContent;
}
复制代码
2、JAVA写入文件,避免中文乱码。
public static void writeFile(String filePathAndName, String fileContent) {
try {
File f = new File(filePathAndName);
if (!f.exists()) {
f.createNewFile();
}
OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f),"UTF-8");
BufferedWriter writer=new BufferedWriter(write);
//PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filePathAndName)));
//PrintWriter writer = new PrintWriter(new FileWriter(filePathAndName));
writer.write(fileContent);
writer.close();
} catch (Exception e) {
System.out.println("写文件内容操作出错");
e.printStackTrace();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2