java - 将字符转换为 UTF-8

标签 java encoding utf-8 character-encoding junit

在我的单元测试中,我试图证明发送到客户端应用程序的 HTTP 响应仅包含有效的 UTF-8 字符。这是因为英镑符号“£”没有作为 UTF-8 编码字符发送,导致客户端应用程序验证失败。

在我的测试中,我正在执行以下操作:

//设置
byte[] outputData = "£".getBytes("ISO-8859-1");
String serviceXmlResponse = String.format("%s", outputData.toString());
String expectedXmlContent = "£";
当(service.getMessage()).thenReturn(serviceXmlResponse);

//行为
ModelAndView 结果 = controller.handlePostRequest(request, response, mav);

//断言
assertEquals(expectedXmlContent, result.getModel().get(ApplicationController.RESPONSE_KEY));

结果 XML 包含:

[B@1164b9b6

我在这里做错了什么?
谢谢

最佳答案

service.getMessage()将您的 XML 作为 String 返回, 而 result.getModel().get(ApplicationController.RESPONSE_KEY)以编码形式返回与 byte[] 相同的 XML ,您的测试应如下所示:

String serviceXmlResponse = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><some>£</some>";
when(service.getMessage()).thenReturn(serviceXmlResponse);

assertArrayEquals(serviceXmlResponse.getBytes("UTF-8"), (byte[]) result.getModel().get(ApplicationController.RESPONSE_KEY));

否则你的测试没有多大意义,特别是如果 result.getModel().get(ApplicationController.RESPONSE_KEY)返回 String ,以便在生成模型属性后在 View 中应用实际编码。

另见:
  • Unicode - How to get the characters right?
  • 关于java - 将字符转换为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4968295/

    相关文章:

    Java输入编码

    php - 保存到mysql时的UTF-8问题

    java - UTF-8 - 我不明白这个字节序列

    PHP 安全 : how can encoding be misused?

    java - Android Studio 错误 "Unsupported class file major version 61"

    java - 为什么我通过 JoinTable 进行的 OneToOne 映射不起作用?

    java - 在递归函数中使用 Scanner 类

    java - 如何处理从 Netbeans 中的 WSDL 文件生成的 SOAP 调用

    windows - 使用 Media Foundation 进行硬件 H264 编码 ID3D11Texture2D

    c++ - 在 Mac 中使用 C++ 读取 UTF-8 数据不起作用