AWS ec2 的奇怪编码问题 - java
Weird encoding issue with AWS ec2 - java
我有一个 Java Spring 启动应用程序,它在本地响应编码良好的文本:
Battle Is the Lord's by Rebecca St. James (Ft. Brandon Lake)
但是当我 运行 我的 AWS 实例 (ec2) 上的应用程序时 returns:
Battle Is the Lord���s by��Rebecca��St. James (Ft.��Brandon��Lake)
这是我的 apache HttpClient 设置:
...
public class HttpClientHandler {
public String getHandler(final String url) {
return getHandler(url, null);
}
public String getHandler(final String url, final String authHeader) {
final StringBuilder apiResponse = new StringBuilder();
final HttpClient client = HttpClientBuilder.create().build();
log.info("Get url: {}, with authHeader: {}", url, authHeader);
final HttpGet request = new HttpGet(url);
request.addHeader("Content-Type", "application/json");
if (authHeader != null && !authHeader.isEmpty()) {
request.addHeader("Authorization", authHeader);
}
try {
final HttpResponse response = client.execute(request);
log.info("Response Code : {}", response.getStatusLine().getStatusCode());
final BufferedReader rd = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
String line;
while ((line = rd.readLine()) != null) {
apiResponse.append(line);
}
} catch (final Exception e) {
e.printStackTrace();
}
return apiResponse.toString();
}
}
我特别困惑,因为我 运行 在本地 运行 应用程序时看到它很好。
感谢您的帮助,
瑞克
InputStreamReader
可以接受一个charset参数。如果未指定,则将使用运行 JVM 的语言环境来确定字符集。解码消息时,它的编码必须与输入编码具有相同的格式。
下面的例子都是用Kotlin写的但是思路是一样的
从一个字符集转换为另一个字符集:
val s = "Battle Is the Lord's by Rebecca St. James (Ft. Brandon Lake)"
val inputStream = s.byteInputStream(Charsets.UTF_8)
val reader = InputStreamReader(inputStream, Charsets.UTF_16)
val lines = BufferedReader(reader).readLines()
println(lines)
将return[??????????]
读取相同字符集中的数据将导致正确读取数据
val s = "your initial string"
val inputStream = s.byteInputStream(Charsets.UTF_8)
val reader = InputStreamReader(inputStream, Charsets.UTF_16)
val lines = BufferedReader(reader).readLines()
println(lines)
会写[your initial string]
我有一个 Java Spring 启动应用程序,它在本地响应编码良好的文本:
Battle Is the Lord's by Rebecca St. James (Ft. Brandon Lake)
但是当我 运行 我的 AWS 实例 (ec2) 上的应用程序时 returns:
Battle Is the Lord���s by��Rebecca��St. James (Ft.��Brandon��Lake)
这是我的 apache HttpClient 设置:
...
public class HttpClientHandler {
public String getHandler(final String url) {
return getHandler(url, null);
}
public String getHandler(final String url, final String authHeader) {
final StringBuilder apiResponse = new StringBuilder();
final HttpClient client = HttpClientBuilder.create().build();
log.info("Get url: {}, with authHeader: {}", url, authHeader);
final HttpGet request = new HttpGet(url);
request.addHeader("Content-Type", "application/json");
if (authHeader != null && !authHeader.isEmpty()) {
request.addHeader("Authorization", authHeader);
}
try {
final HttpResponse response = client.execute(request);
log.info("Response Code : {}", response.getStatusLine().getStatusCode());
final BufferedReader rd = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
String line;
while ((line = rd.readLine()) != null) {
apiResponse.append(line);
}
} catch (final Exception e) {
e.printStackTrace();
}
return apiResponse.toString();
}
}
我特别困惑,因为我 运行 在本地 运行 应用程序时看到它很好。
感谢您的帮助,
瑞克
InputStreamReader
可以接受一个charset参数。如果未指定,则将使用运行 JVM 的语言环境来确定字符集。解码消息时,它的编码必须与输入编码具有相同的格式。
下面的例子都是用Kotlin写的但是思路是一样的
从一个字符集转换为另一个字符集:
val s = "Battle Is the Lord's by Rebecca St. James (Ft. Brandon Lake)"
val inputStream = s.byteInputStream(Charsets.UTF_8)
val reader = InputStreamReader(inputStream, Charsets.UTF_16)
val lines = BufferedReader(reader).readLines()
println(lines)
将return[??????????]
读取相同字符集中的数据将导致正确读取数据
val s = "your initial string"
val inputStream = s.byteInputStream(Charsets.UTF_8)
val reader = InputStreamReader(inputStream, Charsets.UTF_16)
val lines = BufferedReader(reader).readLines()
println(lines)
会写[your initial string]