gpt4 book ai didi

java - 在Mapr FS中写入字符串内容时附加了垃圾字符

转载 作者:行者123 更新时间:2023-12-02 20:58:30 25 4
gpt4 key购买 nike

我们正在尝试实现REST-API,在其中接收json响应并将其转换为字符串json格式。我们正在尝试通过打开流将此字符串内容写入Mapr FS。

FileSystem mfsHandler;

...
...

fsDataStream = mfsHandler.create(new Path("/demo/test.txt"), true);

String name = "Just to test";
byte[] namebytes = name.getBytes();
// fsDataStream.write(namebytes);
BufferedOutputStream bos = new BufferedOutputStream(fsDataStream);
bos.write(namebytes);

但是,在写入内容时,它会附加8位,使字符串向右移动8位。
输出为:
¬Ã^ @ ^ E只需测试

我尝试按照post- http://stackoverflow.com/questions/19687576/unwanted-chars-written-from-java-rest-api-to-hadoopdfs-using-fsdataoutputstream进行操作,但无法解决。

如何避免这种垃圾字符?还有其他选择可以避免8位右移?

最佳答案

这里的问题与Java字符串的编码有关。您可以在调用getBytes时选择要使用的编码。

例如,这是一个微型程序,它输出三种不同编码的字节:

public void testEncoding() throws UnsupportedEncodingException {
String s = "Sample text üø 漢字";

asHex(System.out, s, "UTF-8");
asHex(System.out, s, "UTF-16");
asHex(System.out, s, "SHIFT_JIS");
}

public void asHex(PrintStream out, String msg, String encoding) throws UnsupportedEncodingException {
byte[] buf = msg.getBytes(encoding);
System.out.printf("\n\n%s - %s\n", msg, encoding);
for (int i = 0; i < buf.length; i++) {
byte b = buf[i];
System.out.printf("%02x ", b & 0xff);
if (i % 16 == 15) {
System.out.printf("\n");
}
}
System.out.printf("\n");
}

这是输出:
Sample text üø 漢字 - UTF-8
53 61 6d 70 6c 65 20 74 65 78 74 20 c3 bc c3 b8
20 e6 bc a2 e5 ad 97


Sample text üø 漢字 - UTF-16
fe ff 00 53 00 61 00 6d 00 70 00 6c 00 65 00 20
00 74 00 65 00 78 00 74 00 20 00 fc 00 f8 00 20
6f 22 5b 57


Sample text üø 漢字 - SHIFT_JIS
53 61 6d 70 6c 65 20 74 65 78 74 20 3f 3f 20 8a
bf 8e 9a

如果您在不指定要使用的字符集的情况下调用 getBytes(),则将获得任何默认字符集。这可能在各地发生变化,因此几乎总是最好指定您想要的东西。

关于java - 在Mapr FS中写入字符串内容时附加了垃圾字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43833184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com