Properties乱码问题

2在路上 2014-10-08 08:26:43

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Properties prop = new Properties();
prop.setProperty("IssueType", "xixixi");

prop.setProperty("Frequency", "哈哈");

prop.setProperty("Description", "123");

prop.setProperty("ContactInfo","heihei");
String path = Environment.getExternalStorageDirectory().getPath() + "/1.txt";
Log.v("path",path);
saveConfig(path, prop);
}

public void saveConfig(String file, Properties properties) {
try {
FileOutputStream s = new FileOutputStream(file, false);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s, "utf-8"));
properties.store(bw, "");
s.close();
} catch (Exception e){
e.printStackTrace();
}
}

}



写到手机sdcard里面中文是乱码,不知道有没有解决的办法。
...全文
213 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kifile 2014-10-09
  • 打赏
  • 举报
回复
android和java还是不一样的,android为了很多效率以及别的因素对java本身的库函数做了很多修正的,所以使用android的java类库的时候,并不是完全和oracle的类库一样
2在路上 2014-10-09
  • 打赏
  • 举报
回复
引用 9 楼 kifile 的回复:
所谓的数据储存,读取,不过是双方相互之间规定某种特定格式的文本进行传输。 不必太在意格式问题,什么gson,json,xml,都可以。只要你知道怎么解析就好了,如果你希望方便使用,不希望自己创建类进行解析生成 什么的,json,xml这种很多语言支持的自然是首选,如果你向自己使用解析,你就可以随便写了,只要自己知道怎么解析,是什么含义就好了
同样的代码,在java上,不在android上运行,拿出文档来看就不是unicode编码的。

public class test123 {

	
	public static void main(String[] args) {
		Properties prop = new Properties();
		int issueType = 1;
		int frequency = -1;
		String description = "123131234124";
		String contactInfo = "1234567";
		prop.setProperty("IssueType", "呵呵");  
		prop.setProperty("Frequency", "12345");  
		prop.setProperty("Description", description);
		prop.setProperty("ContactInfo", contactInfo);
		saveConfig("c:/1.txt", prop);

	}

	static public void saveConfig(String file, Properties properties) {  
    	try {  
    		FileOutputStream s = new FileOutputStream(file, false);  
    		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s, "utf-8"));
    		properties.store(bw, "");
    		s.close();
    	} catch (Exception e){  
    		e.printStackTrace();  
    	}  
    }
}
Kifile 2014-10-08
  • 打赏
  • 举报
回复
所谓的数据储存,读取,不过是双方相互之间规定某种特定格式的文本进行传输。 不必太在意格式问题,什么gson,json,xml,都可以。只要你知道怎么解析就好了,如果你希望方便使用,不希望自己创建类进行解析生成 什么的,json,xml这种很多语言支持的自然是首选,如果你向自己使用解析,你就可以随便写了,只要自己知道怎么解析,是什么含义就好了
svenwang 2014-10-08
  • 打赏
  • 举报
回复
引用 7 楼 sanjinxiong 的回复:
[quote=引用 6 楼 svenwang 的回复:] [quote=引用 4 楼 sanjinxiong 的回复:] [quote=引用 3 楼 svenwang 的回复:] 这应该对你没有影响吧,因为Properties的加载和保存都自动处理编码了。 你是想自己解析Properties生成的文件吗?那倒不如用json作为文件格式了。
因为这个东西要拿出来给别人用的。所以要显示中文的。[/quote] 那用json格式很方便啊。 [/quote] json写到文件里面不是a=b这种格式。。。[/quote] 为什么一定要a=b的格式,直接用json就可以,现在没有那种主流语言不支持json吧。 如果你一定要用properties的格式,那就只能自己转一下了。直接用android类库是做不了了,因为properties把代码写死了。
2在路上 2014-10-08
  • 打赏
  • 举报
回复
引用 6 楼 svenwang 的回复:
[quote=引用 4 楼 sanjinxiong 的回复:] [quote=引用 3 楼 svenwang 的回复:] 这应该对你没有影响吧,因为Properties的加载和保存都自动处理编码了。 你是想自己解析Properties生成的文件吗?那倒不如用json作为文件格式了。
因为这个东西要拿出来给别人用的。所以要显示中文的。[/quote] 那用json格式很方便啊。 [/quote] json写到文件里面不是a=b这种格式。。。
svenwang 2014-10-08
  • 打赏
  • 举报
回复
引用 4 楼 sanjinxiong 的回复:
[quote=引用 3 楼 svenwang 的回复:] 这应该对你没有影响吧,因为Properties的加载和保存都自动处理编码了。 你是想自己解析Properties生成的文件吗?那倒不如用json作为文件格式了。
因为这个东西要拿出来给别人用的。所以要显示中文的。[/quote] 那用json格式很方便啊。
Kifile 2014-10-08
  • 打赏
  • 举报
回复
如果一定要中文的话,你就自己手动输出文件不就好了 public void saveConfig(String file, Properties properties) { try { FileOutputStream s = new FileOutputStream(file, false); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s, "utf-8")); //在这里手动遍历属性和值进行输出 s.close(); } catch (Exception e){ e.printStackTrace(); } } 但是如果这样输出的话,你再使用Properties进行读取加载,可能不能读到你想要的东西
2在路上 2014-10-08
  • 打赏
  • 举报
回复
引用 3 楼 svenwang 的回复:
这应该对你没有影响吧,因为Properties的加载和保存都自动处理编码了。 你是想自己解析Properties生成的文件吗?那倒不如用json作为文件格式了。
因为这个东西要拿出来给别人用的。所以要显示中文的。
svenwang 2014-10-08
  • 打赏
  • 举报
回复
这应该对你没有影响吧,因为Properties的加载和保存都自动处理编码了。 你是想自己解析Properties生成的文件吗?那倒不如用json作为文件格式了。
svenwang 2014-10-08
  • 打赏
  • 举报
回复
你说的乱码是这个吗?

Frequency=\u54c8\u54c8
这是改不了的,除非你不用Properties类,因为在Properties类里已经写死了:

    private void dumpString(StringBuilder buffer, String string, boolean key) {
        int i = 0;
        if (!key && i < string.length() && string.charAt(i) == ' ') {
            buffer.append("\\ ");
            i++;
        }

        for (; i < string.length(); i++) {
            char ch = string.charAt(i);
            switch (ch) {
            case '\t':
                buffer.append("\\t");
                break;
            case '\n':
                buffer.append("\\n");
                break;
            case '\f':
                buffer.append("\\f");
                break;
            case '\r':
                buffer.append("\\r");
                break;
            default:
                if ("\\#!=:".indexOf(ch) >= 0 || (key && ch == ' ')) {
                    buffer.append('\\');
                }
                if (ch >= ' ' && ch <= '~') {
                    buffer.append(ch);
                } else {
                    String hex = Integer.toHexString(ch);
                    buffer.append("\\u");
                    for (int j = 0; j < 4 - hex.length(); j++) {
                        buffer.append("0");
                    }
                    buffer.append(hex);
                }
            }
        }
    }
Kifile 2014-10-08
  • 打赏
  • 举报
回复
不算乱码吧,只是把中文转为了 unicode 进行存储而已

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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