如何将一个用utf-8编码的文本用java程序转换成ANSI编码的文本

_阿坤 2013-11-29 08:12:43
比如用utf-8编码保存的test文本中内容为“你好”大小为9字节,然后转化后test1文本中内容“你好”大小为4字节
...全文
749 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
月韵大江古调 2021-07-05
  • 打赏
  • 举报
回复

这是转ANSI吗?这是转为UTF-8

WayneXuan 2013-11-30
  • 打赏
  • 举报
回复
不好意思,刚才没测试就发代码了


	public static void main(String[] args) {
		StringBuffer buffer=new StringBuffer();
		try {
			FileInputStream fis=new FileInputStream("test.txt");
			InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
			BufferedReader br=new BufferedReader(isr);
			String line=null;
			br.skip(1);
			while ((line=br.readLine())!=null) {
				buffer.append(line);
				buffer.append("\r\n");
			}
			buffer.delete(buffer.length()-2,buffer.length());
			br.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println(buffer);
		try {
			FileOutputStream fos=new FileOutputStream("test1.txt");
			OutputStreamWriter osw=new OutputStreamWriter(fos);
			osw.write(buffer.toString());
			osw.flush();
			osw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
WayneXuan 2013-11-30
  • 打赏
  • 举报
回复


	public static void main(String[] args) {
		StringBuffer buffer=new StringBuffer();
		try {
			FileInputStream fis=new FileInputStream("test.txt");
			InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
			BufferedReader br=new BufferedReader(isr);
			String line=null;
			while ((line=br.readLine())!=null) {
				buffer.append(line);
				buffer.append("\r\n");
			}
			br.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		try {
			FileOutputStream fos=new FileOutputStream("test1.txt");
			OutputStreamWriter osw=new OutputStreamWriter(fos);
			osw.write(buffer.toString());
			osw.flush();
			osw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
WayneXuan 2013-11-30
  • 打赏
  • 举报
回复
先读utf-8,再写ansi
cczbbwish 2013-11-30
  • 打赏
  • 举报
回复
要是我来做的话,把原文件读取到内存,在建一个同名的ANSI编码文件,最后写入即可
_阿坤 2013-11-30
  • 打赏
  • 举报
回复
引用 5 楼 waynexuan 的回复:
不好意思,刚才没测试就发代码了


	public static void main(String[] args) {
		StringBuffer buffer=new StringBuffer();
		try {
			FileInputStream fis=new FileInputStream("test.txt");
			InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
			BufferedReader br=new BufferedReader(isr);
			String line=null;
			br.skip(1);
			while ((line=br.readLine())!=null) {
				buffer.append(line);
				buffer.append("\r\n");
			}
			buffer.delete(buffer.length()-2,buffer.length());
			br.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println(buffer);
		try {
			FileOutputStream fos=new FileOutputStream("test1.txt");
			OutputStreamWriter osw=new OutputStreamWriter(fos);
			osw.write(buffer.toString());
			osw.flush();
			osw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
谢谢,好人一生平安, 其实我也写出过类似的程序出来但每次“你好”前面总多出“?”出来,我以为是我的解码或编码的方法用错了,想了很久一直找不到解决方法,没想到跳过前面的?后面的就都正确了,谢谢
WayneXuan 2013-11-30
  • 打赏
  • 举报
回复
引用 8 楼 cczbbwish 的回复:
要是我来做的话,把原文件读取到内存,在建一个同名的ANSI编码文件,最后写入即可
如果程序在写到一半时突然被终止,数据就丢失了,必须先写入另一个文件
WayneXuan 2013-11-30
  • 打赏
  • 举报
回复
jdk有一个关于UTF-8的bug 所以加了一句 br.skip(1); see this and this
solomon5926 2013-11-29
  • 打赏
  • 举报
回复
这个你可以深入的理解一下:http://www.zhihu.com/question/20361462
solomon5926 2013-11-29
  • 打赏
  • 举报
回复
针对你这个问题,我搜索了一下答案,我推荐你一篇博文吧,大概的意思是先获得字节流,然后用这个字节流转化为你想要的编码格式http://blog.csdn.net/zxy838279821/article/details/7536223

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧