如果问题只是关于欧元符号出现乱码的话——也就是程序
import java.io.*;
public class Foo {
public static void main (String args[])
throws Exception
{
System.out.println("\u20ac");
}
}
首先,您需要阅读《软件开发人员绝对必须了解的Unicode和字符集最低限度(没有借口!)》。
然后,您需要让Java发送的编码匹配显示Java输出的编码。我假设您正在使用命令行。
在Linux上,这应该很简单。默认情况下,所有内容都是UTF-8。
在Mac上,Terminal.app中无法正常工作,因为由于某些荒谬的原因,Java的默认文本编码是古老的MacRoman字符集 [更新:我认为从Java 7开始,默认值已经得到修复,不再是问题],它没有欧元符号。但是,Terminal.app完全支持UTF-8。技术上,您可以在Terminal → 首选项 → 设置 → 高级 → 国际 中关闭它,但默认情况下是UTF-8。
要设置java使用UTF-8输出,可以通过传递命令行参数来实现。
java -Dfile.encoding=UTF-8 Foo
但这仅适用于您可以控制程序启动的情况。如果您要发送给其他人运行的JAR或.class
文件,则无法使用此方法。您可以通过创建一个将使用不同编码写入System.out
的对象来设置编码:
import java.io.*;
public class Foo {
public static void main (String args[])
throws Exception
{
PrintWriter out = new PrintWriter(
new OutputStreamWriter(System.out, "UTF-8"), true);
out.println("\u20ac");
}
}
只要您记得始终使用新的
out
变量进行打印,而不是使用
System.out
,就可以了。
在Windows上,情况变得更加混乱。命令提示符的默认编码因Windows的不同语言版本而异。在英文版Windows上,默认编码为
Cp850。在俄罗斯版Windows上,默认编码为
Cp866。两种编码均不支持欧元符号!您可以使用
chcp
命令更改编码,但即使您将其更改为支持欧元符号的编码,命令提示符的默认字体也不支持欧元符号!
您可能能够从Java中检测到您正在Windows命令提示符下运行,通过编程方式更改编码和字体,然后输出您的字符串,但这需要大量的工作。您最好使用以上代码来强制输出UTF-8,并在您的代码中包含说明,如果要在Windows命令提示符下运行该代码,则用户需要先执行以下操作:
1. Run `chcp 65001` to switch the command prompt encoding to UTF-8
2. Switch the font to Lucida Console by clicking the icon in the upper left corner, selecting Properties, and going to the Font tab.
为了让事情变得更容易,但为了增加您编写的代码只能在您的计算机上运行的可能性,您还可以
将默认命令提示符代码页更改为UTF-8。
changeCase
不像mixedCase
或littleJoe
那样清晰地识别为名词。Char变量听起来不像String。 - Joop Eggenchar
数据类型,而不是String
。因此,正确的写法应该是'\u20AC' + "188"
,System.out.print(Character.toUpperCase('j'))
等等。 - erickson