Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java â®;返回时将字符转换为问号_Java_Amazon Web Services_Encoding_Compression_Amazon Sqs - Fatal编程技术网

Java â®;返回时将字符转换为问号

Java â®;返回时将字符转换为问号,java,amazon-web-services,encoding,compression,amazon-sqs,Java,Amazon Web Services,Encoding,Compression,Amazon Sqs,我有一个很奇怪的问题。 我正在从Amazon AWS SQS发送和接收消息。 在放置时,我对消息进行压缩和编码,如下所示: String responseMessageBodyOriginal = gson.toJson(responseData); String responseMessageBodyCompressed = compressToBase64String(responseMessageBodyOriginal); AmazonSqsHelper.sendMessage(resp

我有一个很奇怪的问题。 我正在从Amazon AWS SQS发送和接收消息。 在放置时,我对消息进行压缩和编码,如下所示:

String responseMessageBodyOriginal = gson.toJson(responseData);
String responseMessageBodyCompressed = compressToBase64String(responseMessageBodyOriginal);
AmazonSqsHelper.sendMessage(responseMessageBodyCompressed, queue, null);
public static String compressToBase64String(String data) throws IOException {
    ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length());
    GZIPOutputStream gzip = new GZIPOutputStream(bos);
    gzip.write(data.getBytes());
    gzip.close();
    byte[] compressedBytes = bos.toByteArray();
    bos.close();
    return new String(Base64.encodeBase64(compressedBytes));
}
压缩和编码功能,如下所示:

String responseMessageBodyOriginal = gson.toJson(responseData);
String responseMessageBodyCompressed = compressToBase64String(responseMessageBodyOriginal);
AmazonSqsHelper.sendMessage(responseMessageBodyCompressed, queue, null);
public static String compressToBase64String(String data) throws IOException {
    ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length());
    GZIPOutputStream gzip = new GZIPOutputStream(bos);
    gzip.write(data.getBytes());
    gzip.close();
    byte[] compressedBytes = bos.toByteArray();
    bos.close();
    return new String(Base64.encodeBase64(compressedBytes));
}
另一方面,在接收消息时,代码如下:

List<Message> sqsMessageList = AmazonSqsHelper.receiveMessages(queueUrl, max_message_read_count,
                    default_visibility_timeout);
int num_messages = sqsMessageList.size();
if (num_messages > 0) {
   for (Message m : sqsMessageList) {
       String responseMessageBodyCompressed = m.getBody();
       String responseMessageBodyOriginal = decompressFromBase64String(responseMessageBodyCompressed);
   }
}
但问题是,有时如果我传递像“这样的字符,那么这些字符就会转换成???”,解码后,如果我正在打印消息


无法理解为什么编码和解码行为怪异。任何帮助都将不胜感激。

问题是编码是使用平台的默认字符集(
data.getBytes()
)完成的,而解码是使用UTF-8完成的


compressToBase64String
中,将
data.getBytes()
更改为
data.getBytes(StandardCharsets.UTF_8)

问题是编码是使用平台的默认字符集(
data.getBytes()
)完成的,而解码是使用UTF-8完成的


compressToBase64String
中,将
data.getBytes()
更改为
data.getBytes(StandardCharsets.UTF_8)

您了解ASCII和Unicode之间的区别吗?Unicode是如何进行UTF-8编码的?如果没有,请查看维基百科。处理流中的某个地方存在不匹配,其中数据以一种方式编码,但以另一种方式解码?这是两个Unicode代码点(
0xe2 0xae
)吗?或者,它是UTF-8编码吗?如果是后者,则无效,因为
0xe2
表示3字节编码的开始。这些数据来自哪里?如果不知道您认为这些字符代表什么,就无法确定您的问题所在。@JimGarrison这些是URL。URL包含这些字符。我知道其中的区别:)我确保编码和解码是以同样的方式进行的。例如:@JimGarrison您是否能够找到可能发生这种情况的地方。不过,请提前感谢:)我们无法提供帮助,因为我们不知道Amazon SQS上发生了什么。问题可能就在那里。首先,我会保存压缩流并逐字节比较它们,看看是否有变化。您了解ASCII和Unicode之间的区别,Unicode是如何进行UTF-8编码的吗?如果没有,请查看维基百科。处理流中的某个地方存在不匹配,其中数据以一种方式编码,但以另一种方式解码?这是两个Unicode代码点(
0xe2 0xae
)吗?或者,它是UTF-8编码吗?如果是后者,则无效,因为
0xe2
表示3字节编码的开始。这些数据来自哪里?如果不知道您认为这些字符代表什么,就无法确定您的问题所在。@JimGarrison这些是URL。URL包含这些字符。我知道其中的区别:)我确保编码和解码是以同样的方式进行的。例如:@JimGarrison您是否能够找到可能发生这种情况的地方。不过,请提前感谢:)我们无法提供帮助,因为我们不知道Amazon SQS上发生了什么。问题可能就在那里。我首先保存压缩流并逐字节比较它们,看看是否有什么变化。