字符集未正确应用

时间:2018-06-27 20:05:56

标签: java

我有一个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。

1 个答案:

答案 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)