我正在将项目从Ant转换为Maven,并且在处理UTF-8字符的特定单元测试中遇到问题。问题与以下字符串有关:
String l_string = "ČäÁÓý\n€řЖжЦ\n№ЯФКЛ";
问题是单元测试失败,因为字符串的读取方式如下:
?äÁÓý
€????
?????
java类另存为UTF-8,并且我还在pom.xml中将构建编码指定为UTF-8。
这是我的 pom.xml 的摘录:
...
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.15</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>2.15</version>
</plugin>
</plugins>
</build>
我在这里想念什么吗?如果有人可以在这里帮助我,那就太好了。
更新资料
关于测试代码:
@Test
public void testTransformation()
{
String l_string = "ČäÁÓý\n€řЖжЦ\n№ЯФКЛ";
System.out.println( ">>> " + l_string );
c_log.info( l_string );
StringBuffer l_stringBuffer = new StringBuffer();
int l_stringLength = l_string.length();
String l_fileName = System.getProperty( "user.dir" ) + File.separator + "transformation" + File.separator + "TransformationMap.properties";
Transformation.init( l_fileName );
Properties l_props = Transformation.getProps();
for ( int i = 0; i < l_stringLength; i++ )
{
char l_char = l_string.charAt( i );
int l_intValue = (int) l_char;
if ( l_intValue <= 255 )
{
l_stringBuffer.append( l_char );
}
else
{
l_stringBuffer.append( l_props.getProperty( String.valueOf( l_char ), "" ) );
}
}
c_log.info( l_stringBuffer.toString() );
byte[] l_bytes = l_string.getBytes();
byte[] l_transformedBytes = Transformation.transform( l_bytes );
assertNotNull( l_transformedBytes );
}
以下逻辑不是真正相关的(?),因为在第一个sysout之后,前面提到的“?” 打印而不是正确的字符(因此以下测试失败)。也没有使用默认平台编码。
该测试根据TransformationMap.properties文件转换每个字符,该文件具有以下格式(摘录):
Ý=Y
ý=y
Ž=Z
ž=z
°=.
€=EUR
应该注意的是,当我使用Ant构建项目时,测试运行没有任何问题。
我自己找到了一个“解决方案”:
我不得不将编码传递到maven-surefire-plugin中,但是通常
<encoding>${project.build.sourceEncoding}</encoding>
不工作。我仍然不知道为什么,但是当我将命令行参数传递到插件中时,测试将按预期进行:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.15</version>
<configuration>
<argLine>-Dfile.encoding=UTF-8</argLine>
</configuration>
</plugin>
感谢您的所有回复和其他评论!
问题内容: 我尝试进行后期呼叫并使用此值传递输入-“ä€爱لآहที่”,我收到了错误消息 这是我的代码 它在conn.getInputStream()上失败了; 内容的价值是 在输入为字符串或整数的情况下工作 当我添加语句 我收到了不同的消息 问题答案: 请尝试以下代码: 您应该使用JSONObject传递参数 输入,请尝试 如果输出是:???????,那么不用担心,因为您的输出控制台不支持UT
我有这样一个csv文件 我在读书
问题内容: 考虑: 如何在源代码中声明UTF-8字符串? 问题答案: 在源头中,你可以声明: 在PEP 0263中进行了描述: 然后,你可以在字符串中使用UTF-8: 在Python 3中不需要此声明,因为UTF-8是默认的源编码(请参阅PEP 3120)。 此外,值得验证你的文本编辑器是否已将代码正确编码为UTF-8。否则,你可能会有不被解释为UTF-8的不可见字符。
问题内容: 由于某种原因,似乎响应JS无法正常工作。我正在IE 8中使用媒体查询来更改各种大小的监视器的背景图像。在IE 8中,没有背景,只有纯色。 代码如下: 媒体查询如下所示: 上面的代码在IE 8中无法工作是有原因的吗?我还应该尝试使用另一个JS来使IE 8 Media Queries工作吗? 注意:看来html5-shiv确实有效。我正在实时Web服务器上进行测试。 问题答案: 同样的问题
在尝试让Liberty容器工作时,我遇到了以下问题。 对于数据库连接,我在server.xml中有一个像这样的AuthData部分: 当我试图用未编码的密码运行服务器时,数据库连接按预期工作,但是当密码被编码时,我得到这条消息:连接被拒绝(连接被拒绝)。错误代码=-4499,SQL State = 08001 dsra 0010 e:SQL State = 08001,错误代码=-4499 在设置
问题内容: 我有协议: 我有数据: 在我有: 然后我有所需的方法: 我还是 类型的viewcontroller不符合协议UIPickerViewDataSource 问题答案: 像这样在Swift 3中更改了方法,这就是您收到此错误的原因。 欲了解更多详细阅读苹果文档上。 注意: 您还需要添加的第一个参数标签同样喜欢你的其他方法方法是和。