【问题标题】:Displaying euro symbol using unicode and changing characters to uppercase [closed]使用 unicode 显示欧元符号并将字符更改为大写 [关闭]
【发布时间】:2013-06-18 16:34:33
【问题描述】:

我必须使用 Java 来完成这项工作

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

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);        
    }
}

干杯

【问题讨论】:

  • 编译/运行它时会发生什么?我最近没怎么用过 Java,但我觉得它很正常……有什么问题?
  • 除了款式没什么。这些空间是个好主意,但可以更系统地放置。 changeCase 不能清楚地识别为名词,例如 mixedCaselittleJoe。 Char 变量听起来不像 String。
  • 作业说使用原始char 数据类型,而不是String。所以那将是'\u20AC' + "188"System.out.print(Character.toUpperCase('j')) 等。
  • 这对于初学者来说是一个可怕的任务 - 将非 ASCII 文本输出到终端是困难且不可靠的,原因与 Java 编码无关,所有根据@andrewdotn 的回答,处理损坏的平台。
  • 谢谢埃里克森,我想这就是我遇到的问题。

标签: java unicode capitalization


【解决方案1】:

如果问题只是关于欧元符号出现乱码——即程序

import java.io.*;

public class Foo {

    public static void main (String args[])
        throws Exception
    {
        System.out.println("\u20ac");
    }
}

那么,首先你必须阅读The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

然后,您需要使 Java 发出的编码与显示 Java 输出的事物所期望的编码相匹配。我假设您正在使用命令行。

  • 在 Linux 上,这应该可以正常工作。默认情况下,一切都是 UTF-8。

  • 在 Mac 上的 Terminal.app 中,这不起作用,因为出于某种疯狂的原因,Java 的默认文本编码是 ancient MacRoman character set,它没有欧元。但是 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。

    为了让您更轻松,但为了增加您编写的代码仅在您的计算机上运行的机会,您也可以change the default command prompt code page to UTF-8

【讨论】:

  • 请注意,当代码页设置为 65001 时,MS C 运行时中存在严重错误,这可能导致 Java 和其他应用程序挂起或行为不一致。因此,在 65001 中为所有事情工作通常不是一个好主意。不幸的是,UTF-8 在 Windows 下是二等公民。
  • 非常感谢,没有输出问题,它是字符和字符串的混淆,输出 188 欧元罚款,我只是不确定代码是否符合规范,干杯!
  • 作为代码页 65001 的替代品,858(又名 IBM00858:OEM 多语言拉丁语 1 + 欧元符号)也有 € 符号
【解决方案2】:

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

【讨论】:

  • 这个答案要成熟得多。现在我们知道谁是专家,谁不是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-11
  • 2020-06-23
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 2018-10-15
相关资源
最近更新 更多