2011-12-08 8 views
0

--Found私の問題への解決策をコードする、コードがのiOS /ジャワ(GWT + GAE)/ UrbanAirshipは、ドイツ語のウムラウト

は私がプッシュメッセージを介してドイツ語のウムラウト(OAU)を送信する際に問題が生じていますupdated--ですiPhone。 Google App EngineでJava/GWTを実行していて、プッシュ通知にUrbanAirshipを使用しています。次のコードは、私のMacで完璧に動作し、プッシュ通知は正しいドイツのウムラウトが入った状態で届きます。私がgae-serverに展開すると、ドイツのウムラウトは動作しません。これまでのところ、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()ない:

は、結果を新規バイト配列に格納、プラットフォームのデフォルト文字セットを使用してバイトのシーケンスにこの文字列をエンコードします。

代わりに、おそらくUTF-8でgetBytes(String)またはgetBytes(Charset)を使用します。 (類似の問題は、new String(byte[])などいくつかの方法に影響します)

ハッピーコーディング。

+0

あなたの答えをありがとう、悲しいことに、それは助けにはなりません。私はgetBytesの呼び出しを修正し、別の文字セットで試しました。 「UTF-8」を使用すると、ウンラーート疑問符の代わりに四角い背景の疑問符が表示されます。 –

関連する問題