生成文本文件后编码格式问题

RIYAO1314 2011-11-19 01:58:09
最近无聊,在做一个小程序,程序需要生成脚本,就用了FileWriter fileWriter = new FileWriter("C:\\test\\test.ssd");,但是后来发现编码格式要是Unicode的,就改用了 OutputStreamWriter outPutStreamWriter = new OutputStreamWriter(new FileOutputStream("C:\\test\\Test.ssd"),"Unicode");但是生成文件后确是Unicode big endian的,就改用new String来强制转换,但是转换后也不行。。。求助,如何才能让生成的脚本是Unicode的,最好附代码.
...全文
134 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
magong 2011-11-19
  • 打赏
  • 举报
回复
楼主,这样看看行不?

bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("C:\\test\\Test.ssd"), "UTF-16LE"));
bw.write(0xFEFF);
bw.write(你真正要写的字符串);
huntor 2011-11-19
  • 打赏
  • 举报
回复
UTF-16/Unicode 和 UTF-16BE/UnicodeBigUnmarked 不同。
文字内容:你好
$ hexdump u16.txt 
0000000 fffe 604f 7d59
0000006

$ hexdump u16be.txt
0000000 604f 7d59
0000004

RIYAO1314 2011-11-19
  • 打赏
  • 举报
回复
是的。。。貌似还没找到java生成编码为Unicode的
都是BE
[Quote=引用 7 楼 magong 的回复:]

其实默认Unicode就应该是BE的。
那个程序很奇怪嘛。
[/Quote]
magong 2011-11-19
  • 打赏
  • 举报
回复
其实默认Unicode就应该是BE的。
那个程序很奇怪嘛。
RIYAO1314 2011-11-19
  • 打赏
  • 举报
回复
知道啊,写脚本是为了给另外一个程序发送的,但是另外一个程序只认Unicode
自己新建一个文本,将文本格式另存为Unicode发送是没有问题的
用自己写的软件发送的话,编码转不成Unicode,就乱码了

[Quote=引用 4 楼 riyao1314 的回复:]

就是UTF-8的话,生成文本,里面内容,都没有问题,
UTF-16LE的话,里面的东西乱码了
UTF-16BE的话,里面写不进内容。
引用 3 楼 magong 的回复:

引用 2 楼 riyao1314 的回复:

UTF-16BE 的话,脚本就没写入东西,UTF-16LE的话,脚本后缀就倒过来了
引用 1 楼 huntor 的回复:

Java code
Charse……
[/Quote]
huntor 2011-11-19
  • 打赏
  • 举报
回复
用什么编码写,就的用什么编码读。不然就是乱码。
RIYAO1314 2011-11-19
  • 打赏
  • 举报
回复
就是UTF-8的话,生成文本,里面内容,都没有问题,
UTF-16LE的话,里面的东西乱码了
UTF-16BE的话,里面写不进内容。
[Quote=引用 3 楼 magong 的回复:]

引用 2 楼 riyao1314 的回复:

UTF-16BE 的话,脚本就没写入东西,UTF-16LE的话,脚本后缀就倒过来了
引用 1 楼 huntor 的回复:

Java code
Charset charset = Charset.forName("UTF-8");
// Charset charset = Charset.forName("UTF-16BE");
//……
[/Quote]
magong 2011-11-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 riyao1314 的回复:]

UTF-16BE 的话,脚本就没写入东西,UTF-16LE的话,脚本后缀就倒过来了
引用 1 楼 huntor 的回复:

Java code
Charset charset = Charset.forName("UTF-8");
// Charset charset = Charset.forName("UTF-16BE");
// Charset charset = Charse……
[/Quote]
应该是
new FileOutputStream("C:\\test\\Test.ssd"),"UTF-16LE"
的啊,楼主所说“脚本后缀就倒过来了”是什么意思呢?
RIYAO1314 2011-11-19
  • 打赏
  • 举报
回复
UTF-16BE 的话,脚本就没写入东西,UTF-16LE的话,脚本后缀就倒过来了
[Quote=引用 1 楼 huntor 的回复:]

Java code
Charset charset = Charset.forName("UTF-8");
// Charset charset = Charset.forName("UTF-16BE");
// Charset charset = Charset.forName("UTF-16LE");
PrintWriter writer = new PrintWriter(new Out……
[/Quote]
huntor 2011-11-19
  • 打赏
  • 举报
回复
Charset charset = Charset.forName("UTF-8");
// Charset charset = Charset.forName("UTF-16BE");
// Charset charset = Charset.forName("UTF-16LE");
PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream("..."),charset));

BufferedWriter reader = new BufferedReader(new InputStreamReader(new FileInputStream("..."),charset));

62,615

社区成员

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

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