Android 对JSON中的特殊字符进行编码(ä;ö;ü;ß;)
我现在开发了一个德语应用程序,它将数据从JSON获取到ListView。由于有一些特殊的字符,例如üöäß,在下面的代码中,这些字符显示为?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
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);