Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 对JSON中的特殊字符进行编码(ä;ö;ü;ß;)_Android_Json_Encoding - Fatal编程技术网

Android 对JSON中的特殊字符进行编码(ä;ö;ü;ß;)

Android 对JSON中的特殊字符进行编码(ä;ö;ü;ß;),android,json,encoding,Android,Json,Encoding,我现在开发了一个德语应用程序,它将数据从JSON获取到ListView。由于有一些特殊的字符,例如üöäß,在下面的代码中,这些字符显示为? public class LooserSync extends IntentService { public LooserSync() { super("LooserSyncService"); } @Override protected void onHandleIntent(Intent intent

我现在开发了一个德语应用程序,它将数据从JSON获取到ListView。由于有一些特殊的字符,例如üöäß,在下面的代码中,这些字符显示为

public class LooserSync extends IntentService {

    public LooserSync() {
        super("LooserSyncService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        Database.OpenHelper dbhelper = new Database.OpenHelper(getBaseContext());
        SQLiteDatabase db = dbhelper.getWritableDatabase();
        DefaultHttpClient httpClient = new DefaultHttpClient();
        db.beginTransaction();
        HttpGet request = new HttpGet(
                "http://liebenwald.spendino.net/admanager/dev/android/projects.json");
        try {
            HttpResponse response = httpClient.execute(request);
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                InputStream instream = response.getEntity().getContent();
                BufferedReader r = new BufferedReader(new InputStreamReader(
                        instream), 8000);
                StringBuilder total = new StringBuilder();
                String line;
                while ((line = r.readLine()) != null) {
                    total.append(line);
                }
                instream.close();
                String bufstring = total.toString();
                JSONArray arr = new JSONArray(bufstring);
                Database.Tables tab = Database.Tables.AllTables.get(Database.Project.NAME);
                tab.DeleteAll(db);
                for (int i = 0; i < arr.length(); i++) {
                    tab.InsertJSON(db, (JSONObject) arr.get(i));
                }
                db.setTransactionSuccessful();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        db.endTransaction();
        db.close();

    }

}
public类LooserSync扩展IntentService{
公共同步{
超级(“松散同步服务”);
}
@凌驾
受保护的手部内容无效(意图){
Database.OpenHelper dbhelper=new Database.OpenHelper(getBaseContext());
SQLiteDatabase db=dbhelper.getWritableDatabase();
DefaultHttpClient httpClient=新的DefaultHttpClient();
db.beginTransaction();
HttpGet请求=新HttpGet(
"http://liebenwald.spendino.net/admanager/dev/android/projects.json");
试一试{
HttpResponse response=httpClient.execute(请求);
if(response.getStatusLine().getStatusCode()==HttpStatus.SC\u OK){
InputStream instream=response.getEntity().getContent();
BufferedReader r=新的BufferedReader(新的InputStreamReader(
内流),8000);
StringBuilder总计=新StringBuilder();
弦线;
而((line=r.readLine())!=null){
合计.追加(行);
}
流内关闭();
字符串bufstring=total.toString();
JSONArray arr=新JSONArray(bufstring);
Database.Tables选项卡=Database.Tables.AllTables.get(Database.Project.NAME);
tab.DeleteAll(db);
对于(int i=0;i
这是URL返回的响应标题:

内容类型
标头缺少字符集语句。如果你能改变这一点,那么它应该会起作用

编辑:如果无法更改,则需要硬编码一个字符集作为
InputStreamReader
的第二个参数


一般来说,如果你期望的不是编码,那么你需要考虑编码;服务器告诉您的是编码,以及如何正确解码。

使用以下代码获取德语数据,因为数据是UTF-8标准的

HttpGet request = new HttpGet(
                "http://liebenwald.spendino.net/admanager/dev/android/projects.json");

httpget.setHeader("charset", "utf-8");
        ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
    public String handleResponse(final HttpResponse response)
        throws HttpResponseException, IOException {
        StatusLine statusLine = response.getStatusLine();
        if (statusLine.getStatusCode() >= 300) {
            throw new HttpResponseException(statusLine.getStatusCode(),
                    statusLine.getReasonPhrase());
        }

        HttpEntity entity = response.getEntity();
        return entity == null ? null : EntityUtils.toString(entity, "UTF-8");
    }
} 

        String html = httpclient.execute(request, responseHandler);
HttpGet请求=新的HttpGet(
"http://liebenwald.spendino.net/admanager/dev/android/projects.json");
httpget.setHeader(“字符集”、“utf-8”);
ResponseHandler ResponseHandler=新ResponseHandler(){
公共字符串句柄响应(最终HttpResponse响应)
抛出HttpResponseException,IOException{
StatusLine StatusLine=response.getStatusLine();
if(statusLine.getStatusCode()>=300){
抛出新的HttpResponseException(statusLine.getStatusCode(),
statusLine.getReasonPhrase());
}
HttpEntity=response.getEntity();
返回实体==null?null:EntityUtils.toString(实体,“UTF-8”);
}
} 
字符串html=httpclient.execute(请求、响应句柄);
谢谢
Deepak

尝试显式定义InputStreamReader的编码,例如:

String encoding = "ISO-8859-1";
BufferedReader reader = new BufferedReader(new InputStreamReader(is, encoding));

JSON内容使用UTF-8作为默认字符集(请参阅)。您必须确保服务器返回具有正确编码的响应,并为流读取器显式使用UTF-8编码:

BufferedReader r = new BufferedReader(new InputStreamReader(instream, "UTF-8"), 8000);

此外,JSON内容必须采用UTF-8格式。另见:
BufferedReader r = new BufferedReader(new InputStreamReader(instream, "UTF-8"), 8000);