当前位置: 首页 > 面试题库 >

Maven:UTF-8中的源编码不起作用?

闻人望
2023-03-14
问题内容

我正在将项目从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中更改了方法,这就是您收到此错误的原因。 欲了解更多详细阅读苹果文档上。 注意: 您还需要添加的第一个参数标签同样喜欢你的其他方法方法是和。