我认为我到处都是。在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);
答案 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);
有一些不同的编码器,您可以设置诸如换行,填充等属性。
或者您可能对十六进制表示更满意。