黑马程序员技术交流社区

标题: 关于Properties类store方法的问题.. [打印本页]

作者: 折纸时代    时间: 2013-3-5 09:39
标题: 关于Properties类store方法的问题..
Properties类是集合和IO技术结合的成果.   
可以把数据以Map集合的形式存入,也可以通过IO流技术读取或者输出.
该类的store方法,是一个输出方法.

[size=-1] void
store(OutputStream out, String comments)
          以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。
[size=-1] void
store(Writer writer, String comments)
          以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。
上面是方法的重载.
一个接受字节流,一个接受字符流.
接受字符流的方法描述,是支持字符串的.
该方法的描述: 如果 comments 变量非 null,则首先将 ASCII # 字符、注释字符串和一个行分隔符写入输出流。
现在的问题是,对属性列表文件进行描述的时候,不支持中文字符串.  只是输出#\u4EC0\u4E48? (中文: 你好).

字符输出PrintWriter应该是按一个字符为单位的吧.  怎么会这样呢?
属性列表信息如果是中文的话,使用字符流输出没有问题.
只有描述信息失败..

作者: 唐长智    时间: 2013-3-5 11:28
store方法的内部编码是ISO-8859-1,ISO-8859-1是单字节编码,自身不能显示中文,若要显示中文,必须和其他能显示中文的编码配合,new String(target.getBytes("iso-8859-1"),"utf-8")用这个方法能转换成utf-8的形式显示。

作者: 折纸时代    时间: 2013-3-5 12:15
唐长智 发表于 2013-3-5 11:28
store方法的内部编码是ISO-8859-1,ISO-8859-1是单字节编码,自身不能显示中文,若要显示中文,必须和其他 ...

ISO-8859-1 编码,然后用UTF-8解码转换成字符串??   
字节流方法是ISO-8859-1的编码形式.
字符流是按照字符来算的.
正常GBK编码写入文件是 字符形式的: \u0000
UTF-8 直接就是?? 了.  错误编码.

属性列表内容是没有问题的, 中文正常显示.
只是描述信息有问题.  中文显示字符形式.  英文没问题.
作者: 唐长智    时间: 2013-3-5 13:08
没有我的意思是,用了这个方法应该就没有办法输出中文信息了,想要中文还要后期再转码的吧。
作者: 折纸时代    时间: 2013-3-5 13:29
唐长智 发表于 2013-3-5 13:08
没有我的意思是,用了这个方法应该就没有办法输出中文信息了,想要中文还要后期再转码的吧。 ...

这个方法输出的是当前字符,而不是字符信息,如果编码异常出现未知字符,那就不可逆了.
我刚才就是这个意思.

你的意思是把所有中文字符都进行转码,然后存入属性列表,取出时再转码对么?
如果中文转成ISO-8859-1编码,存入时是该编码,而不是中文字符, 这样直接查看就不行了.

属性文件有时候需要直接查看的.  中文属性值是没哟问题,就是描述信息异常.
作者: mnxnm    时间: 2015-7-23 01:45
prop.setProperty("fileName", new String("测试文件".getBytes(),"ISO-8859-1"));
prop.store(fos,new String("文件信息".getBytes(),"ISO-8859-1"));

#文件信息
#Thu Jul 23 01:39:20 CST 2015
fileName=\u00B2\u00E2\u00CA\u00D4\u00CE\u00C4\u00BC\u00FE

请教,描述信息不乱码,属性值乱码了,请问这是为什么呢



作者: 哆啦小a梦    时间: 2017-1-2 14:21
可能是编译时期有错误,跳过编译,运行时转码也许可行




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2