我有一个 Spark Java Web 服务,可以接收 UTF-8 格式的请求。当收到扩展字符(如变音符号或带波形符的字母)时,它们在转换为字符串时无法正确包含正确的字符。调试:
1) 我收到请求并将其字节显示为十六进制值(这包含正确的字符)。
2) 然后我将接收到的字节转换为字符串(指定 UTF-8 的字符集)。
3) 最后,我再次将步骤 2 中的字符串显示为十六进制值。
不幸的是,步骤 1 中的十六进制值与步骤 3 中的十六进制值不匹配。以下是我正在使用的代码:
byte[] bytes = request.bodyAsBytes();
LOGGER.debug( "1 - Body as bytes: " );
LOGGER.debug( javax.xml.bind.DatatypeConverter.printHexBinary(bytes) );
LOGGER.debug( "1 - End of body" );
// charset hard coded to UTF-8 for testing...
String charSet = requestHeadersDto.getCharacterSet().equals( "" ) ? DEFAULT_CHAR_SET : requestHeadersDto.getCharacterSet();
LOGGER.debug( "Charset: " + charSet );
String xml = new String( bytes , charSet );
LOGGER.debug( "2 - Body as bytes: " );
LOGGER.debug( javax.xml.bind.DatatypeConverter.printHexBinary( xml.getBytes() ) );
LOGGER.debug( "2 - End of body" );
我做错了什么? TIA。
最佳答案
xml.getBytes()
应该是:
xml.getBytes(charSet)
或
xml.getBytes(Charset.forName(charSet))
关于java - 字符集未正确应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51070602/