javaSE 汉字编码问题 UTF-8 改为 GBK试试先。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 book.txt 是什么编码的,使用InputStreamReader读入。使用OutputStreamWriter写出。 你是哪里乱码了,是读进来的时候就乱码了,还是写出去的时候乱码。利用InputStreamReader来处理读取乱码,OutputStreamWriter来处理写入乱码 这是我的其中一张表:Create table power( --权限表 power_id numeric(9) primary key not null, --权限编号 user_id numeric(9) not null, --用户编号 power_role varchar(100) not null --用户角色 );我现在改了,好像也不行,请看代码,望指教问题出在哪:import java.io.*;public class CommentOut_OracleToMySQL { public static void main(String[] args) throws IOException { _OracleToMySQL("C:/book.txt"); } public static void _OracleToMySQL(String pathName) throws IOException{ InputStreamReader inR = new InputStreamReader(new FileInputStream(pathName),"UTF-8"); BufferedReader reader = new BufferedReader(inR); OutputStreamWriter out= new OutputStreamWriter(new FileOutputStream("C:/text.txt"),"UTF-8"); BufferedWriter bw = new BufferedWriter(out); System.out.println("按默认编码["+inR.getEncoding()+"]输入"); System.out.println("按默认编码["+out.getEncoding()+"]输出"); String text = ""; String tmpReader = null; while( null != (tmpReader=reader.readLine()) ){ tmpReader = new String(tmpReader.getBytes(),"UTF-8"); String[] split = tmpReader.split("--"); for( int i=0 ; i<split.length ; i++ ){ text = text+split[i]+"##"; } text = text.substring(0, text.length()-2)+System.getProperty("line.separator"); text = new String(text.getBytes(),"UTF-8"); bw.write(text); text = "" ; } bw.close(); reader.close(); }} 请看6楼数据,我改成了InputStreamReader和OutputStreamWriter,不知道错在哪里,也不行。请看6楼 你代码既然能正确的替换和输出就是代码的逻辑是没有问题的,还是我上面说的你先看下你是哪里乱码的,是在读取文件的时候读进来的数据就已经是乱码的还是写文件数据写出去的时候变乱码了.你先把你while里面读到的tempReader这个打印出来看看是不是读的时候就已经乱码了,如果读的时候就乱码了那么就不能用utf-8来读了要还gbk来读,写出去也要换gbk来写 你确定文件的原始编码是GBK,还是UTF-8? 源文件编码应该是GBK吧?毕竟我保存在txt中,是这样的:源文件就是一个在pl/sql上写的sql语句,然后被我放到了一个txt文本而已,sql中包含了被注释的中文。我的代码试图转型为UTF-8。 工作空间我设定的是UTF-8 测试了下,应该是在读入的时候就是乱码了,可是,如果不是因为编码不对,我们又何须转码,所以我觉得问题似乎不出在这。望指教你u8读取乱码了那就用gbk来读,用gbk来写 public static void _OracleToMySQL(String pathName) throws IOException{ BufferedReader reader = new BufferedReader(new FileReader(new File(pathName))); BufferedWriter bw = new BufferedWriter(new FileWriter("C:/text.txt")); String text = ""; String tmpReader = null; while( null != (tmpReader=reader.readLine()) ){// tmpReader = new String(tmpReader.getBytes(),"UTF-8"); String[] split = tmpReader.split("--"); for( int i=0 ; i<split.length ; i++ ){ text = text+split[i]+"##"; } System.out.println(text); text = text.substring(0, text.length()-2)+System.getProperty("line.separator");// text = new String(text.getBytes(),"UTF-8"); bw.write(text); text = "" ; } bw.close(); reader.close(); }}去掉你的转码就好了 楼主看看,/*** * oracle的注释为--,而mysql的注释为#, 我这里有一张表,是oracle写的,我现在写个java把他的--转换成# , * 结果,代码ok,但是,被注释的中文乱码了,求教! */ static void s6(){ try { //新建的txt默认编码格式GBK 编码方式的,所以这里读取的必须设置成GBK方式 InputStreamReader inR = new InputStreamReader(new FileInputStream("E:/a.txt"),"GBK"); BufferedReader reader = new BufferedReader(inR); OutputStreamWriter out= new OutputStreamWriter(new FileOutputStream("E:/b.txt"),"GBK"); //如果想使用UTF-8,请将txt文件另存为,设置成UTF-8编码方式// InputStreamReader inR = new InputStreamReader(new FileInputStream("E:/a.txt"),"UTF-8");// BufferedReader reader = new BufferedReader(inR);// OutputStreamWriter out= new OutputStreamWriter(new FileOutputStream("E:/b.txt"),"UTF-8"); BufferedWriter bw = new BufferedWriter(out); System.out.println("按默认编码["+inR.getEncoding()+"]输入"); System.out.println("按默认编码["+out.getEncoding()+"]输出"); String text = ""; String tmpReader = null; while( null != (tmpReader=reader.readLine()) ){ String[] split = tmpReader.split("--"); for( int i=0 ; i<split.length ; i++ ){ text = text+split[i]+"##"; } text = text.substring(0, text.length()-2)+System.getProperty("line.separator"); bw.write(text); text = "" ; } bw.close(); reader.close(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } 楼猪为什么要用split把他拆开,然后又把它串在一起啊,不可以直接replace掉么 tmpReader = new String(tmpReader.getBytes(),"UTF-8");这一行代码的意思是,使用UTF-8,tmpReader的字节进行编码,那也就是说,tmpReader里面的字节应该是UTF-8编码才能正常处理。因此,先确定你的文件是不是UTF-8编码的。用记事本打开那个txt文件,然后保存的时候选择编码为utf-8即可。写入一样的道理。 软件怎么加信用卡支付功能?(急求救) 两个面试问题求解 如何获取ftp服务器上要某个下载文件的大小,类库用的common.net.ftp System.out.println的问题 连接数据库出现问题,各位高手帮我看看啊!!! 初学者提问:刚学JAVA,想装个开发工具,请教要装什么???? 如何获得文件的创建时间?? 高分问个简单的问题 一个文件没发现的异常处理(FileNotFoundException),请大家指教啊!!! JAVA美元符号 JAVA 日期转换 代码中是怎么调用compareTo方法的
使用OutputStreamWriter写出。
Create table power( --权限表
power_id numeric(9) primary key not null, --权限编号
user_id numeric(9) not null, --用户编号
power_role varchar(100) not null --用户角色
);我现在改了,好像也不行,请看代码,望指教问题出在哪:
import java.io.*;
public class CommentOut_OracleToMySQL {
public static void main(String[] args) throws IOException {
_OracleToMySQL("C:/book.txt");
}
public static void _OracleToMySQL(String pathName) throws IOException{
InputStreamReader inR = new InputStreamReader(new FileInputStream(pathName),"UTF-8");
BufferedReader reader = new BufferedReader(inR);
OutputStreamWriter out= new OutputStreamWriter(new FileOutputStream("C:/text.txt"),"UTF-8");
BufferedWriter bw = new BufferedWriter(out);
System.out.println("按默认编码["+inR.getEncoding()+"]输入");
System.out.println("按默认编码["+out.getEncoding()+"]输出");
String text = "";
String tmpReader = null;
while( null != (tmpReader=reader.readLine()) ){
tmpReader = new String(tmpReader.getBytes(),"UTF-8");
String[] split = tmpReader.split("--");
for( int i=0 ; i<split.length ; i++ ){
text = text+split[i]+"##";
}
text = text.substring(0, text.length()-2)+System.getProperty("line.separator");
text = new String(text.getBytes(),"UTF-8");
bw.write(text);
text = "" ;
}
bw.close();
reader.close();
}
}
请看6楼数据,
我改成了InputStreamReader和OutputStreamWriter,不知道错在哪里,也不行。
请看6楼
是这样的:源文件就是一个在pl/sql上写的sql语句,然后被我放到了一个txt文本而已,sql中包含了被注释的中文。
我的代码试图转型为UTF-8。
工作空间我设定的是UTF-8
测试了下,应该是在读入的时候就是乱码了,可是,如果不是因为编码不对,我们又何须转码,所以我觉得问题似乎不出在这。望指教
你u8读取乱码了那就用gbk来读,用gbk来写
BufferedReader reader = new BufferedReader(new FileReader(new File(pathName)));
BufferedWriter bw = new BufferedWriter(new FileWriter("C:/text.txt"));
String text = "";
String tmpReader = null;
while( null != (tmpReader=reader.readLine()) ){
// tmpReader = new String(tmpReader.getBytes(),"UTF-8");
String[] split = tmpReader.split("--");
for( int i=0 ; i<split.length ; i++ ){
text = text+split[i]+"##";
}
System.out.println(text);
text = text.substring(0, text.length()-2)+System.getProperty("line.separator");
// text = new String(text.getBytes(),"UTF-8");
bw.write(text);
text = "" ;
}
bw.close();
reader.close();
}
}
去掉你的转码就好了
* oracle的注释为--,而mysql的注释为#, 我这里有一张表,是oracle写的,我现在写个java把他的--转换成# ,
* 结果,代码ok,但是,被注释的中文乱码了,求教!
*/
static void s6(){
try {
//新建的txt默认编码格式GBK 编码方式的,所以这里读取的必须设置成GBK方式
InputStreamReader inR = new InputStreamReader(new FileInputStream("E:/a.txt"),"GBK");
BufferedReader reader = new BufferedReader(inR);
OutputStreamWriter out= new OutputStreamWriter(new FileOutputStream("E:/b.txt"),"GBK"); //如果想使用UTF-8,请将txt文件另存为,设置成UTF-8编码方式
// InputStreamReader inR = new InputStreamReader(new FileInputStream("E:/a.txt"),"UTF-8");
// BufferedReader reader = new BufferedReader(inR);
// OutputStreamWriter out= new OutputStreamWriter(new FileOutputStream("E:/b.txt"),"UTF-8");
BufferedWriter bw = new BufferedWriter(out);
System.out.println("按默认编码["+inR.getEncoding()+"]输入");
System.out.println("按默认编码["+out.getEncoding()+"]输出");
String text = "";
String tmpReader = null;
while( null != (tmpReader=reader.readLine()) ){
String[] split = tmpReader.split("--");
for( int i=0 ; i<split.length ; i++ ){
text = text+split[i]+"##";
}
text = text.substring(0, text.length()-2)+System.getProperty("line.separator");
bw.write(text);
text = "" ;
}
bw.close();
reader.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
这一行代码的意思是,使用UTF-8,tmpReader的字节进行编码,那也就是说,tmpReader里面的字节应该是UTF-8编码才能正常处理。因此,先确定你的文件是不是UTF-8编码的。用记事本打开那个txt文件,然后保存的时候选择编码为utf-8即可。
写入一样的道理。