2009-12-04 48 views
3

我终于给我写了一个小应用程序。这是桌面应用程序,但它具有嵌入式Web服务器。当我从NetBeans发布它时,一切都很好。当我午餐dist jar我在GUI中有正确的字符编码,但Web服务器输出已损坏(“?”,而不是国家字符)。使用NetBeans生成的dist jar中错误的字符编码

我使用NetBeans 6.7.1,jdk1.6.0_16,从Java SE 6的HTTP服务器和lib罗马1.0

我不把任何的源代码在这里,因为我不知道巫部分应我把。

//编辑: 数据在字符串中被硬编码。这些字符串被传递给罗马作为创建RSS节点的参数,罗马RSS feed被写入String,然后字符串被传递给HttpHandler。

+0

Web服务器从哪里获取数据?请提供更多关于你在做什么的信息。 – 2009-12-04 07:56:45

+0

我编辑了我的问题以添加更多详细信息。 – 2009-12-04 09:03:48

回答

2

此问题可能与NetBeans无关。通常字符编码问题是由于而不是定义了某处的字符编码,在这种情况下,实际的字符编码将由运气决定。

例如,Java Strings在内部是UTF-16,但Java Readers使用的编码由平台默认值决定,除非明确指定。

+1

好吧,我明白了,但是什么导致从NetBeans运行的dist文件夹和程序中jar的程序运行的不同行为?为什么我对NetBeans有更多好运? – 2009-12-04 09:04:40

+0

如何启动NetBeans,以及如何从命令行运行jar或通过双击运行jar?所有这些事情都会影响JVM认为是“默认编码”的内容,因此依赖于“默认编码”(即不明确定义编码)会保证导致非确定性行为。 – 2009-12-04 12:04:28

+0

我通过双击运行jar和通过桌面上的快捷方式运行NetBeans。我使用Vista 64 Business SP2英文。我还在Win XP Pro English上检查了jar(双击),结果相同(“?”而不是波兰语字母)。 – 2009-12-04 12:15:05

3
  • 检查encoding in the source files
  • 检查执行encoding/decoding的任何点(通常在任何地方String -> byte[]byte[] -> String)。任何将字节转换为字符串的操作都将执行编码操作myEncoding -> UTF-16
  • 检查您是否将适当的编码信息传递给执行编码/解码的第三方库。
  • 如果生成XML,请确保标头编码与用于写入字节的编码(<?xml version="1.0" encoding="UTF-8"?>)匹配。
  • 如果通过HTTP提供内容,请确保内容类型和字符集header正确(例如Content-Type: text/html; charset=utf-8)。字符集通常仅适用于提供文本MIME类型(例如,它不适用于application/rss+xml)。检查你的MIME文档。
+0

谢谢。好的编码故障排除手册 – 2009-12-04 13:56:39