Java 编码JSON数组
我有一个JSON数组,我想把它写到一个文件中。关于编写文件,一切都很完美,但问题是当我尝试读取它时,会给我大量未编码的文本作为“alpha”。文本为阿拉伯语 这是我读取文件的代码:Java 编码JSON数组,java,android,Java,Android,我有一个JSON数组,我想把它写到一个文件中。关于编写文件,一切都很完美,但问题是当我尝试读取它时,会给我大量未编码的文本作为“alpha”。文本为阿拉伯语 这是我读取文件的代码: FileInputStream fis = openFileInput("File"); BufferedInputStream bis = new BufferedInputStream(fis); StringBuffer sb = new StringBuffer
FileInputStream fis = openFileInput("File");
BufferedInputStream bis = new BufferedInputStream(fis);
StringBuffer sb = new StringBuffer();
while(bis.available() != 0){
char c = (char) bis.read();
sb.append(c);
}
JSONArray read = new JSONArray(sb.toString());
for(int x = 0; x < read.length(); x++){
JSONObject readOb = read.getJSONObject(x);
String id = readOb.getString("id");
String name = readOb.getString("name");
Toast.makeText(Main.this, "Id: " + id + "Name: " + name , Toast.LENGTH_LONG).show();
}
bis.close();
fis.close();
FileInputStream fis = openFileInput("My Books");
Reader reader = new InputStreamReader(fis, "UTF-8");
char[] buf = new char[1024];
int red = -1;
StringBuffer sb = new StringBuffer();
while ((red = reader.read(buf)) != -1) {
sb.append(buf, 0, red);
}
fis.close();
从文件中读取数据时,尝试对其进行编码
Charset.forName("UTF-8").encode(sb.toString())
这个
这是错误的JSON
在大多数情况下是以UTF-8
编码的,这意味着字节不是字符。您需要使用读取器
,它使用编码对流进行解码
例如:
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
然后您可以读取,它将返回一个完整的UTF-8
字符,可以是1到4个字节
以下是如何完整有效地读取文件:
FileInputStream fis = openFileInput("File");
BufferedInputStream bis = new BufferedInputStream(fis);
StringBuffer sb = new StringBuffer();
while(bis.available() != 0){
char c = (char) bis.read();
sb.append(c);
}
JSONArray read = new JSONArray(sb.toString());
for(int x = 0; x < read.length(); x++){
JSONObject readOb = read.getJSONObject(x);
String id = readOb.getString("id");
String name = readOb.getString("name");
Toast.makeText(Main.this, "Id: " + id + "Name: " + name , Toast.LENGTH_LONG).show();
}
bis.close();
fis.close();
FileInputStream fis = openFileInput("My Books");
Reader reader = new InputStreamReader(fis, "UTF-8");
char[] buf = new char[1024];
int red = -1;
StringBuffer sb = new StringBuffer();
while ((red = reader.read(buf)) != -1) {
sb.append(buf, 0, red);
}
fis.close();
(这与将InputStream读取为字符串的Apache EntityUtils实现非常接近)
我强烈反对使用BufferedReader.readLine,这在很多地方都可以看到,原因有二:
BufferedReader
在从网络读取时很有趣,而readLine
在读取大小有界的行时很有趣,因为它限制了链接速度慢时的读取调用次数,并允许逐行处理。请检查此链接可能会对您有所帮助,因为您正在读取一个字节并考虑一个字符。就是这样not@njzk2我该怎么做才能把它编码?嗯,读我的答案?它不接受这种方式。Eclipse给出了一个语法错误.dirty。您正在尝试重新编码已解码的字符串。同样,错误的是,当字符集解码ByteBuffers时,不是Strings感谢您的帮助,而是如何将InputStreamReader附加到StringBuffer。我试图附加它,但没能实现。我将用我尝试过的代码编辑我的帖子。使用你已经拥有的代码。InputStreamReader.read返回一个完整字符,因此char c=(char)irs.read()代码>工作,但InputStreamReader isr没有与like BufferInputStream相同的功能。没有可用的isr();请帮助。您不需要可用性(如果您真的需要,可以将其包装在BufferedReader中)。你可以简单地一直读到-1(如果你读了文档,这表示流的结束),如果我错了,你能纠正我的代码吗?对不起,我在JSON方面没有足够的经验。我将编辑我的帖子。