- нашел решение моей проблемы, код обновлен -
У меня проблема с отправкой умлаутов (öäü) через iPhone через push-сообщения на iPhone.
Я использую Java / GWT в Google AppEngine и использую UrbanAirship для push-уведомлений. Следующий код прекрасно работает на моем Mac, push-уведомление приходит с правильным немецким умлаутом. Если я разверну его на 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;
}