2013-01-16 47 views
1

我有一个netty服务器运行,似乎忽略了编码。由于PI符号导致d3.js中的错误。以下是设置编码的代码。即使在硬编码之后它仍然不起作用,为什么?Netty似乎无视编码

RandomAccessFile raf; 
try { 
    raf = new RandomAccessFile(file, "r"); 
} catch (FileNotFoundException fnfe) { 
    sendError(ctx, NOT_FOUND); 
    return; 
} 
long fileLength = raf.length(); 

HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK); 
setContentTypeHeader(response, file); 
setContentLength(response, fileLength); 
setDateAndCacheHeaders(response, file); 
if (isKeepAlive(request)) { 
    response.setHeader(CONNECTION, HttpHeaders.Values.KEEP_ALIVE); 
} 

// Write the initial line and the header. 
ctx.write(response); 

// Write the content. 
ChunkedFile chunkedFile = new ChunkedFile(raf, 0, fileLength, 8192); 
ChannelFuture writeFuture = ctx.write(chunkedFile); 

ctx.write(chunkedFile, writeFuture); 

这里是setContentTypeHeader代码:

private static void setContentTypeHeader(HttpResponse response, File file) { 
String contentType = MimeTypes.getContentType(file.getPath()); 
response.setHeader(CONTENT_TYPE, contentType); 
if (!contentType.equals("application/octet-stream")) { 
    response.setHeader(CONTENT_ENCODING, "charset=utf-8"); 
} 

}

回答

2

Content encoding不是字符编码,但对于压缩如gzip。响应的字符编码在Content-Type header中指定。

private static void setContentTypeHeader(HttpResponse response, File file) { 

    String contentType = MimeTypes.getContentType(file.getPath()); 

    if (!contentType.equals("application/octet-stream")) { 
     contentType += "; charset=utf-8"; 
    } 
    response.setHeader(CONTENT_TYPE, contentType); 

}