用 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 ######
##### ¯\_(ツ)_/¯ ######
##################################
该文件为 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();
我正在开发一个 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 ######
##### ¯\_(ツ)_/¯ ######
##################################
该文件为 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();