我有一个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。
答案 0 :(得分:1)
const staticCache = "staticCache-v1";
const staticAssets = [
//js
"browser-sync/browser-sync-client.js?v=2.24.5",
"index.html",
"scripts/bundle.js",
//css
"styles/main.scss",
//html
"index.html",
//fonts
"https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2",
"https://free.currencyconverterapi.com/api/v5/currencies"
];
self.addEventListener("install", event => {
// Cache static resources
event.waitUntil(
caches.open(staticCache).then(cache => cache.addAll(staticAssets))
);
});
self.addEventListener("activate", event => {
// clean old SW
});
self.addEventListener("fetch", event => {
// try placing the sw in .tmp
console.log("fetch request :", event.request);
event.respondWith(
caches.match(event.request).then(cacheResponse => {
return cacheResponse || fetch(event.request);
})
);
});
应该是:
xml.getBytes()
或
xml.getBytes(charSet)