我在Heroku上托管的java文件中遇到了charset问题(UTF-8)。
使用一个小例子更好地解释它:
// '…' UTF-8 encoding is 0xE2 0x80 0xA6
// stringToHex() outputs the HEX value to console/log
stringToHex(new String("…".getBytes(), "UTF-8"));
现在,一切都在本地完美运行(Tomcat 7) - 在控制台中输出“0xE2 0x80 0xA6”。
当我在Heroku(Jetty 7)上托管的登台服务器上尝试时,“0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD”将被写入日志。
两个服务器都使用参数“-Dfile.encoding = UTF-8”运行java(因此Charset.defaultCharset().toString()
输出“UTF-8”)。
任何人都可以帮我解决这个奇怪的问题吗?
感谢。
更新 - 忘了说:所有文件都以UTF-8编码,并使用javac -encoding UTF-8
进行编译
更新2 - 尝试使用'£'代替'...'并在登台服务器上获取“0xEF 0xBF 0xBD 0xEF 0xBF 0xBD”而不是“0xC2 0xA3”...似乎就像它的总是将每个字节转换为“0xEF 0xBF 0xBD”(对应于 )...... ???
更新3 - 由于Heroku正在使用Jetty,我尝试在本地使用Jetty,一切都运行良好。
更新4 - 这是我的stringToHex()函数:
private void stringToHex(String string) throws UnsupportedEncodingException {
String result = "";
String tmp;
for(byte b : string.getBytes("UTF-8")) {
tmp = Integer.toHexString(0xFF & b);
if(tmp.length() == 1) {
tmp += '0';
}
result += "0x" + tmp.toUpperCase() + " ";
}
logger.info(result);
}
要在UTF-8中编译,我使用maven-compiler-plugin。 pom.xml相关部分:
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
...
</plugins>
答案 0 :(得分:0)
问题是由AspectJ配置引起的。如果要将AspectJ与Java和Spring一起使用,则必须在插件配置中指定编码:
<plugins>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.10</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.6.10</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<configuration>
<outxml>true</outxml>
<verbose>true</verbose>
<showWeaveInfo>true</showWeaveInfo>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
...
</plugins>