2011-12-08 43 views
0

--Found解决我的问题,代码是updated--的iOS /爪哇(GWT + GAE)/ UrbanAirship编码德语元音变音

我有通过推送的消息发送德语元音变音(非统组织)的一个问题iPhone。 我在Google AppEngine上运行Java/GWT,并使用UrbanAirship作为推送通知。以下代码在我的Mac上完美工作,推送通知以正确的德语变音形式到达。如果我将它部署到gae服务器,德国元音变音器不工作。到目前为止,我发现在GAE上,标准编码是US-ASCII,并且在这里有一些帮助将getBytes()和其他一切改为UTF-8。 问题仍然存在,但现在问题标记用iPhone替代了现在的“钻石”作为背景的变音?!

这里来了,我现在用的方法(正常工作的地方,不是在GAE):

private Boolean sendNotification(String appKey, String appMasterSecret, String jsonBodyString) { 

    try { 

     URL url = new URL("https://go.urbanairship.com/api/push/broadcast/"); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setRequestMethod("POST"); 
     connection.setDoOutput(true); 
     connection.setConnectTimeout(12000); 

     String authString = appKey + ":" + appMasterSecret; 
     String authStringBase64 = Base64.encode(authString.getBytes("UTF-8")); 
     authStringBase64 = authStringBase64.trim(); 

     connection.setRequestProperty("Content-type", "application/json; charset:utf-8"); 
     connection.setRequestProperty("Authorization", "Basic " + authStringBase64); 

     OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); 
     osw.write(new String(jsonBodyString.getBytes("UTF-8"),"UTF-8")); 
     osw.close(); 

     int responseCode = connection.getResponseCode(); 
     String responseMessage = connection.getResponseMessage(); 
     if (responseCode == 200) 
      return true; 


    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     return false; 
    } catch (ProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     return false; 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     return false; 
    } 
    return false; 
} 
+0

好吧,我更进一步。我发现应用程序引擎的默认字符集是US-ASCII。我系统的默认字符集是UTF-8。现在我需要将US-ASCII转换为UTF-8。 –

回答

0

getBytes()无编码!你应该感到羞耻!嗯,不是真的:)

String.getBytes()

将此String解码使用平台的默认字符集字节序列,并将结果存储到一个新的字节数组。

使用getBytes(String)getBytes(Charset)代替 - 可能使用UTF-8。 (类似的问题影响new String(byte[])和其他一些方法。)

快乐编码。

+0

感谢您的回答,可悲的是它没有帮助。我修改了getBytes调用,并尝试使用不同的字符集。如果我使用“UTF-8”,我正在使用正方形背景上的元音问号而不是问号。 –