Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ISO-8859-1字符编码在Linux中不起作用_Java_Amazon Web Services_Amazon Sqs - Fatal编程技术网

Java ISO-8859-1字符编码在Linux中不起作用

Java ISO-8859-1字符编码在Linux中不起作用,java,amazon-web-services,amazon-sqs,Java,Amazon Web Services,Amazon Sqs,我已经在windows中尝试了下面的代码,并且能够解码消息。但是当我尝试Linux时,同样的代码不起作用 String message ="ööööö"; String encodedMsg = new String(message.getBytes("ISO-8859-1"), "UTF-8"); System.out.println(encodedMsg); 我已经验证并可以看到Linux平台中的默认字符集是UTF-8(

我已经在windows中尝试了下面的代码,并且能够解码消息。但是当我尝试Linux时,同样的代码不起作用

String message ="ööööö";
String encodedMsg = new String(message.getBytes("ISO-8859-1"), "UTF-8");
System.out.println(encodedMsg);
我已经验证并可以看到Linux平台中的默认字符集是UTF-8(Charset.defaultCharset().name())


请建议我如何在Linux平台上进行同样的编码。

首先,我不确定您到底期望什么……您使用的术语“encode”有点令人困惑,但从您的评论来看,似乎输入“ÃÃÃÃÃÃÃÃÃÃÔ,您期望输出“ööööö”

在使用Java1.8的Linux和OSX上,我确实得到了这个结果。 我没有一台Windows机器来尝试这个

正如@Pshemo所指出的,您的输入可能是以UTF-8而不是ISO-8859-1的形式表示的,因为它在源代码中是作为字符串硬编码的。事实上,这正是我所期望的,我很惊讶代码能如您所期望的那样工作


尝试使用String.encode()创建输入,将其编码为ISO-8859-1。

首先,我不确定您到底期望的是什么……您使用的术语“encode”有点让人困惑,但从您的评论来看,似乎输入“ÃÃÃÃÃÃÃÃÃÔ,您期望的输出是“öööööö”

在使用Java1.8的Linux和OSX上,我确实得到了这个结果。 我没有一台Windows机器来尝试这个

正如@Pshemo所指出的,您的输入可能是以UTF-8而不是ISO-8859-1的形式表示的,因为它在源代码中是作为字符串硬编码的。事实上,这正是我所期望的,我很惊讶代码能如您所期望的那样工作


尝试使用String.encode()创建输入,编码为ISO-8859-1。

对此的解释是,几乎总是,在编码未明确指定的地方,字节变为字符或字符变为字节,因此默认为“平台默认值”,因此,根据您在哪个平台上运行,会导致不同的结果

除此之外,在代码片段中,每个将字节转换为字符或将字符转换为字节的位置都明确指定了编码

还是这样

String message=“ÃÃÃÃÃÃÃÔ

啊,不,你忘了一个地方:javac本身。 您可以编译此代码。这将是原始字节(因为编译器正在查看
ManmohansSourceFile.java
,这是一个文件,不是字符,而是一堆字节)被转换成字符(因为java编译器处理字符),这是通过一些编码完成的。如果在运行
javac
时没有使用
-encoding
开关(或者maven或gradle正在运行
javac
,并且它传递了一个编码,这取决于您的pom/gradle文件),那么这将使用系统编码读取,因此字符串是否实际包含这些字节——谁知道呢

这很可能是你问题的根源

修复?选择一个:

  • 不要将非ascii码放入源文件中。请注意,您可以在源文件中以
    \u00C3
    的形式编写unicode符号“带波浪号的拉丁文大写字母A”,而不是以
    的形式编写。然后对¨使用
    \u00B6
  • 确保在编译时指定正确的
    -encoding
    开关。因此,如果您的文本编辑器(用于键入
    String message=“”“”;
    )配置为“UTF-8”,然后运行
    javac-encoding UTF-8 manMohansFile.java

  • 对此的解释是,几乎总是,在编码未明确指定的地方,字节被转换为字符或字符被转换为字节,因此,默认为“平台默认值”,因此,根据您在哪个平台上运行它,会导致不同的结果

    除此之外,在代码片段中,每个将字节转换为字符或将字符转换为字节的位置都明确指定了编码

    还是这样

    String message=“ÃÃÃÃÃÃÃÔ

    啊,不,你忘了一个地方:javac本身。 您可以编译此代码。这将是原始字节(因为编译器正在查看
    ManmohansSourceFile.java
    ,这是一个文件,不是字符,而是一堆字节)被转换成字符(因为java编译器处理字符),这是通过一些编码完成的。如果在运行
    javac
    时没有使用
    -encoding
    开关(或者maven或gradle正在运行
    javac
    ,并且它传递了一个编码,这取决于您的pom/gradle文件),那么这将使用系统编码读取,因此字符串是否实际包含这些字节——谁知道呢

    这很可能是你问题的根源

    修复?选择一个:

  • 不要将非ascii码放入源文件中。请注意,您可以在源文件中以
    \u00C3
    的形式编写unicode符号“带波浪号的拉丁文大写字母A”,而不是以
    的形式编写。然后对¨使用
    \u00B6
  • 确保在编译时指定正确的
    -encoding
    开关。因此,如果您的文本编辑器(用于键入
    String message=“”“”;
    )配置为“UTF-8”,然后运行
    javac-encoding UTF-8 manMohansFile.java

  • 我不是Linux用户,但对于那些是谁,可能会试图帮助你考虑澄清你的意思是“它不工作”。您预期会发生什么以及发生了什么?实际上,当我在window machine中运行此代码时,我能够将此消息编码为“öööö”,但相同的编码在Linux平台中没有出现“但在Linux平台中没有出现相同的编码”从您的示例中,我看不到您实际使用
    encodedMsg
    (如打印)的任何地方。你能编辑它来添加一些沿
    System.out.println(encodedMsg)的内容吗并包括您在Linux上获得的实际结果?我不是Linux用户,但我是为那些
    
    String message ="\u00C3\u00B6\u00C3\u00B6\u00C3\u00B6\u00C3\u00B6\u00C3\u00B6";
    String encodedMsg = new String(message.getBytes("ISO-8859-1"), "UTF-8");
    System.out.println(encodedMsg);
    > ööööö