15

出于某种原因,使用 Scanner 类分配字母å的字符串不等于使用“正常”方式 分配åString a = "å"的字符串: -为什么?

import java.util.*;

public class UTF8Test {
public static void main(String [] args) {

    String [] Norge = {"løk", "hår", "vår", "sær", "søt"};

    Scanner input = new Scanner(System.in);

    String  test = input.nextLine();  //I enter løk here
    System.out.println(test);
    System.out.println(Norge[0]);

    for(int i = 0; i < Norge.length; i++) {
        if(Norge[i].equals(test) ) {
            System.out.println("YES!!");
        }
    }
}
}

编译器将显示:

乐克

乐克

l├©k

4

5 回答 5

7
于 2013-11-13T16:32:25.310 回答
4

如果您想要一个带有特殊字符的字符串文字,您可以尝试使用 Unicode 转义:

String [] Norge = {"l\u00F8k", "h\u00E5r", "v\u00E5r", "s\u00E6r", "s\u00F8t"};

虽然在源代码中包含特殊字符(至少在 java 中)并没有错,但在某些情况下,它可能会导致配置不当的编辑器、编译器或终端出现问题;就我个人而言,如果可以的话,我会完全避免使用特殊字符。

顺便说一句,您还可以在 java 源代码的其他地方使用 Unicode 转义,包括 javadoc 注释以及类、方法和变量名。

如果您从命令行编译,您可以将编译器配置为接受 UTF-8,方法是使用-encoding选项 withUTF-8作为其参数。像这样:

javac -encoding UTF-8 ...

您可能还会发现这个问题很有用:Java 中的特殊字符


您可能会考虑将字符串外部化,作为解决问题的替代方法。Eclipse 提供了一种自动执行此操作的方法,但它基本上只是获取所有文字字符串,将它们放在单独的文件中,然后从该文件中读取以获取适当的字符串。这还允许您创建程序的翻译,方法是制作一个包含所有字符串翻译的不同文件,或者重新配置应用程序消息而无需重新编译。


编辑:我只是尝试自己编译和运行它(在eclipse中),我没有你提到的问题。因此,您的特定设置可能存在问题。

当我重新配置它以将代码编译为 US-ASCII 时,它会输出l?k两次。

当我重新配置它以将代码编译为 UTF-8 时,输出为løkand løk.

当我将其编译为 UTF-16 时,输出为þÿ l ø kand løk,但是我无法从终端复制空格þÿ l ø k:它可以让我复制前两个,但不考虑其余部分。这可能与您遇到的问题有关 - 它们可能是一些控制字符在您的情况下搞砸了。

于 2013-11-13T15:30:37.810 回答
3

默认情况下,在 Windows 上,java 编译器使用“平台默认编码”解释其所有源文件。根据您运行编译器的环境,这可能是 ISO-8859-1、CP1252、UTF-8 或任何其他编码。

如果您使用的编辑器实际上是使用 UTF-8 编码您的 java 源文件,但编译器正在使用另一种编码读取这些源文件,那么您的所有硬编码字符串的内容可能会被搞砸(正如您所经历的那样)。要解决此问题,请确保将 java 源文件保存为“平台默认编码”,或设置 java 编译器以将源文件解释为 UTF-8。

尝试用 . 调用你的编译器javac -encoding UTF-8 UTF8Test.java。如有必要,请确保将 UTF-8 替换为编辑器用来保存源文件的任何内容。

于 2013-11-13T15:21:31.587 回答
1

If you are working in Eclipse, Change your console encoding, using RUN menu > Run configurations.. > Common tab (Right hand side) > In encoding panel > select Other=UTF-8


enter image description here

于 2015-12-17T11:47:55.903 回答
-1

I had a issue with displaying the norwegian characters. Try using the encoding: ISO 8859- 10

于 2021-10-12T20:24:05.053 回答