【问题标题】:Writing shrugging ASCII emoji ¯\_(ツ)_/¯ in plain text with java用java用纯文本写耸耸肩的ASCII表情符号¯\_(ツ)_/¯
【发布时间】:2015-11-20 15:07:23
【问题描述】:

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

¯\_(ツ)_/¯

我用这个BufferedOutputStream做到了:

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

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

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

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

【问题讨论】:

  • 首先,这绝不是 ASCII。
  • 哦,还有 OP:如果你还没有读过这篇文章,我强烈推荐它:joelonsoftware.com/articles/Unicode.html(这里不是要刻薄,但现在它可能会消除很多困惑和未来)。

标签: java encoding ascii emoji ascii-art


【解决方案1】:

.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.

【讨论】:

    【解决方案2】:

    文件是 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>
    

    在 Windows 等非 UTF-8 系统上无法在控制台上显示 System.out。

    此外,为了让您的应用程序具有可移植性,请确保指定写入的编码;它通常是一个可选参数,具有覆盖的方法/构造函数。

    【讨论】:

    • 我尝试指定编码但没有成功:Charset.forName("UTF-8").encode(string); errorOutput.writeln(string);
    • new OutputStreamWriter(outputStream, "UTF-8") 是将文本 (String, Writer)(在 java 中始终是 Unicode)转换为字节 (byte[], OutputStream) 的众多可能性之一。但是该文件似乎已经可以了,为 UTF-8。编辑器只需要知道它是 UTF-8。使用 JEdit 或 Notepad++。
    • Charset.forName("UTF-8").encode(string); errorOutput.writeln(string);---这显然是错误的。您忽略encode 的返回值,然后将您之前拥有的相同字符串发送到errorOutput。顺便说一句,errorOutput 必须是OutputStream,而不是Writer,才能正常工作。
    【解决方案3】:

    用这些sn-ps的代码解决了:

    @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();
    

    【讨论】:

    • getStdErr() 会返回表情符号吗?
    猜你喜欢
    • 2011-02-02
    • 2013-07-21
    • 2021-01-13
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 2021-01-18
    相关资源
    最近更新 更多