如何在Java中生成非UTF-8字符串/字符以进行测试?

时间:2018-08-15 09:25:59

标签: java utf-8

我认为我到处都是。在Ruby中找到了一些示例,但在Java中却没有找到连贯的内容。

如何在Java中生成非UTF-8字符串/字符以进行测试?

具体来说,我有一个json文件,其中包含与我们使用的某些翻译机制(因此,涉及多种语言)相关的不同键值,此json与我们拥有的某些映射器进行了解析

如果在json中遇到非UTF数据,我想检查映射器是否返回正确的值。

所以,我想以类似的方式使用它:

String expectedValue = "FooBarNonUtf8";
String actualValue = jsonReader.readFrom("file", "key"); //should parse non-UTF correctly
assertEquals(expectedValue, actualValue);

1 个答案:

答案 0 :(得分:1)

在发生了使用C / C ++进行编码的灾难之后(当时的历史),Java做出了以下设计决策:

  • String, char, Reader, Writer用于处理Unicode文本,char为UTF-16,两个字节。
  • byte[], InputStream, OutputStream用于二进制数据,给定某种编码/字符集,可以是文本。

所以实际上您只能滥用字符串/字符,几乎可以保证会有损坏的数据(某些字符对UTF- *具有特殊的结构含义)。

解决方案是在例如Base64中编码二进制数据。

byte[] b = ...
String s = Base64.getEncoder().encode(b);

有一些不同的编码器,您可以设置诸如换行,填充等属性。

或者您可能对十六进制表示更满意。