gpt4 book ai didi

java - Java 字符串中的字符 "æ", "ø" "æ"(Windows)

转载 作者:太空狗 更新时间:2023-10-29 22:56:01 29 4
gpt4 key购买 nike

出于某种原因,使用 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

løk

l├©k

最佳答案

如果您唯一的要求是能够按照 UTF8Test 类名的指示在任何地方使用 UTF-8,那么您的主要错误是您使用的是 Windows 命令控制台来编译和运行您的 Java 程序。 ├©mojibaked ø 的形式强烈暗示您使用的是 CP850 encoding 来编译你的 Java 源代码文件。作为证据,在支持 UTF-8 的环境中运行它:

System.out.println(new String("ø".getBytes("UTF-8"), "CP850"));

这会打印├©。这反过来又强烈建议您使用 Windows 命令控制台来编译 Java 源代码文件,因为这是目前唯一默认使用 CP850 的常用环境。但是,Windows 命令控制台支持 UTF-8。

当您在文本编辑器中使用 UTF-8 编码保存(从字符转换为字节)源代码文件时,ø 字符将转换为字节 0xC30xB8(作为证据,参见 "UTF-8 (hex)" entry in U+00F8 character info)。当您运行 javac UTF8Test.java 时,基本上使用 CP850 编码读取 UTF-8 保存的源代码文件(从字节转换为字符)。字节 0xC30xB8 表示此编码中的字符 ©(作为证据,参见 CP850 codepage layout ).这完全解释了您最初的问题。

是的,您可以通过-encoding UTF-8 参数指示javac 使用UTF-8 读取源代码文件。但是,Windows 命令控制台本身根本不支持 UTF-8 风格的输入和输出。当您使用 -encoding UTF-8 重新编译时,您仍然会得到 mojibaked 输出,因为命令控制台无法正确表示 UTF-8 输出。我在这里尝试过,但得到的是学位符号:

løkl°k

如果您打算在任何地方都使用 UTF-8 并且想坚持使用 Windows 命令控制台作为输入/输出环境,则此问题无法解决。基本上,您需要一个支持 UTF-8 的输入/输出环境。 Eclipse 和 Netbeans 等不错的 IDE 就是这样的。或者,如果您打算将其作为支持 UTF-8 的独立程序运行,请使用 Swing UI应该优先于无 GUI 的控制台程序。

关于java - Java 字符串中的字符 "æ", "ø" "æ"(Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19957431/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com