用 java 以纯文本形式书写耸肩 ASCII 表情符号¯\_(ツ)_/¯

Writing shrugging ASCII emoji ¯\_(ツ)_/¯ in plain text with java

我正在开发一个 java 程序,将输出写入文本文件。当出现问题时,我必须把这个 ASCII 艺术:

¯\_(ツ)_/¯

我用这个 BufferedOutputStream:

errorOutput.writeln("##################################\n"
                    + "#####       Error Output     ######\n"
                    + "#####       ¯\_(ツ)_/¯       ######\n"
                    + "##################################\n");

问题是,当我看到用 java 写的 txt 日志时,我得到了这个:

##################################
#####       Error Output    ######
#####       ¯\_(ツ)_/¯       ######
##################################

如何在 Java 中写入正确的 ASCII 表情符号?

.java 文件保存为 UTF-8 此代码对我有用:

String string = "##################################\n"
            + "#####       Error Output     ######\n"
            + "#####       ¯\_(ツ)_/¯       ######\n"
            + "##################################\n";
Charset.forName("UTF-8").encode(string);
System.out.println(string);

输出:

##################################
#####       Error Output     ######
#####       ¯\_(ツ)_/¯       ######
##################################

DEMO HERE.

该文件为 UTF-8,但您正在以单字节编码查看它:

  • 您看到的是特殊字符的 UTF-8 多字节序列,每个字节一个字符。

确保您以 UTF-8 格式读取它,因为您确实使用了非 ASCII、类似逗号、引号和日语。所以UTF-8没问题。

Windows 下的一个肮脏的把戏是:

String string = "\uFEFF##...

这会写入一个 Unicode BOM 字符,当它是文件的第一个字符时被解释为 Unicode 标记。

否则创建一个 HTML 指定字符集的文件:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <pre>...</pre>
    </body>
</html>

在控制台上显示,System.out,在 Windows 等非 UTF-8 系统上是不可能的。

另外,为了使您的应用程序具有可移植性,请确保您指定了写入的编码;它通常是一个可选参数,具有覆盖 method/constructor.

使用这些代码片段解决了问题:

@GET
@Path("getStdErr/{idApp}")
@Produces("text/html; charset=UTF-8")
public Response getStdErr(@PathParam("idApp") Integer idApp) {
    return super.getStderr(jobsMap.get(idApp));
}
.
.
.
.
return Response.ok(job.getStdErr(), "text/plain; charset=UTF-8").build();