使用Java中的getCurrencyInstance()获取特定符号

时间:2017-04-29 19:20:14

标签: java format output number-formatting

我正在编写一个非常简单的小示例类来尝试显示Java中NumberFormat类的.getCurrencyInstance()如何工作,但我的输出看起来有点时髦。似乎班级正在运作,但是当它试图打印出货币的实际符号时(比如日元符号或英镑符号),我会得到奇怪的符号。有没有什么办法解决这一问题?我需要导入一些东西才能在我的计算机上获取这些符号吗?

这是我的代码:

import java.util.*;
import java.text.*;

public class CurrencyFormatExample
{
   public static void main(String[] args)
   { 
      double convert = 9398.9398;

      NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();
      System.out.println("American: " + currencyFormat.format(convert));

      Locale swedish = new Locale("sv", "SE");
      NumberFormat swedishFormat = NumberFormat.getCurrencyInstance(swedish);

      System.out.println("Swedish: " + swedishFormat.format(convert));

      Locale japanese = new Locale("ja", "JP");
      NumberFormat japaneseFormat = NumberFormat.getCurrencyInstance(japanese);

      System.out.println("Japanese: " + japaneseFormat.format(convert));

      Locale russian = new Locale("ru", "RU");
      NumberFormat russianFormat = NumberFormat.getCurrencyInstance(russian);

      System.out.println("Russian: " + russianFormat.format(convert));

      Locale british = new Locale("en", "GB");
      NumberFormat britishFormat = NumberFormat.getCurrencyInstance(british);

      System.out.println("British: " + britishFormat.format(convert));
   }
}

以下是我得到的输出:

American: $9,398.94
Swedish: 9á398,94 kr
Japanese: ?9,399
Russian: 9á398,94 ???.
British: ú9,398.94

正如你所看到的,显然不对。我能以任何方式解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

如果您在Eclipse中执行此代码,请调整窗口>偏好>一般>工作区文本编码为UTF-8

答案 1 :(得分:0)

在jGRASP中:“设置”> “字体”,“字符集”选项卡。将“I / O Charset”更改为UTF-8。在“编译器”选项卡的“标志/参数”子选项卡中,对于“运行”命令的“FLAGS2”,添加“-Dfile.encoding = UTF-8”。

“file.encoding”更改还将更改程序读取和写入的默认编码文件。遗憾的是,当Java连接到管道而不是控制台(大多数IDE将使用管道)时,Java不提供从stdin,stdout和stderr为普通文件I / O和I / O指定不同字符集的方法。因此,如果您希望在程序中默认使用本机编码,并且仍希望UTF-8用于IDE的I / O,则无法执行此操作。因此,IDE自动添加“file.encoding”标志是不明智的,除非有“只使用UTF-8用于所有内容”设置。