4

我必须使用 Java 来完成这个

第1 部分:使用字符原始数据类型输出 188 欧元。为欧元符号使用 Unicode 欧元</p>

Part2:将下面的char变量'j''o''e'改成大写JOE并输出结果。

我用过这段代码,我错过了什么吗?

public class Test27 {

    public static void main (String args[]){
    System.out.println("\u20ac" +"188");

    String changeCase= "joe";

    String result;
    result=changeCase.toUpperCase();

    System.out.println( result);        
    }
}

干杯

4

2 回答 2

7

如果问题只是关于欧元符号的乱码——也就是说,程序

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 字符集,它没有欧元。但是 Terminal.app 完全支持 UTF-8。从技术上讲,您可以在终端 → 首选项 → 设置 → 高级 → 国际中关闭它,但默认情况下它是 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. 运行chcp 65001将命令提示符编码切换为 UTF-8
    2. 单击左上角的图标,选择“属性”,然后转到“字体”选项卡,将字体切换到 Lucida Console。

    为了让您更轻松,但为了增加您编写的代码仅在您的计算机上运行的机会,您还可以将默认命令提示符代码页更改为 UTF-8

在此处输入图像描述 在此处输入图像描述

于 2013-06-18T18:12:00.737 回答
2

如果输出是乱码,而不是欧元符号,则可能是您运行程序的控制台有问题。确保它能够打印 € 并且平台的默认字符编码与控制台的字符编码相匹配。

于 2013-06-18T16:55:04.307 回答