我已经阅读了一段时间的Unicode和UTF-8编码,我想我理解它,所以希望这不是一个愚蠢的问题:
我有一个文件,其中包含一些CJK字符,并已保存为UTF-8.我安装了各种亚洲语言包,并且其他应用程序正确地呈现了字符,所以我知道这很有用.
在我的Java应用程序中,我按如下方式读取文件:
// Create objects
fis = new FileInputStream(new File("xyz.sgf"));
InputStreamReader is = new InputStreamReader(fis, Charset.forName("UTF-8"));
BufferedReader br = new BufferedReader(is);
// Read and display file contents
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
System.out.println(sb);
Run Code Online (Sandbox Code Playgroud)
输出显示CJK字符为'???'.一个is.getEncoding()确认它肯定使用UTF-8的电话.我错过了让角色正确显示的步骤?如果它有所不同,我正在使用Eclipse控制台查看输出.
McD*_*ell 16
System.out.println(sb);
Run Code Online (Sandbox Code Playgroud)
问题在于以上几行.这将使用默认系统编码对字符数据进行编码,并将数据发送到STDOUT.在许多系统中,这是一个有损的过程.
如果更改默认值,System.out则控制台使用的编码和编码器必须匹配.
唯一支持的更改默认系统编码的机制是通过操作系统.(有些人会建议使用file.encoding系统属性,但这不支持,可能会产生意想不到的副作用.)您可以将setOut用于自己的自定义PrintStream:
PrintStream stdout = new PrintStream(System.out, autoFlush, encoding);
Run Code Online (Sandbox Code Playgroud)
您可以通过" 运行"配置更改Eclipse控制台编码.
你可以在我的博客上找到一些关于这个主题的帖子 - 通过我的个人资料.
以下程序使用TextPad将CJK字符打印到控制台.要查看韩文韩文和日文平假名,我必须告诉Java将打印流的编码更改为EUC_KR并设置TextPad工具输出窗口的属性:
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
class Hangul {
public static void main(String[] args) throws Exception {
// Change console encoding to Korean
PrintStream out = new PrintStream(System.out, true, "EUC_KR");
System.setOut(out);
// Print sample to console
String go_hello = "?? ?????";
System.out.println(go_hello);
}
}
Run Code Online (Sandbox Code Playgroud)
工具输出是:
가다こんにちは
| 归档时间: |
|
| 查看次数: |
13251 次 |
| 最近记录: |