当前位置: 首页 > 知识库问答 >
问题:

getBytes(“UTF-8”)、getBytes(“windows-1252”)和getBytes()之间有什么区别?

陈翰林
2023-03-14

我有下面的代码,它会产生令人困惑的输出。。

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;

    public class Main {

        String testString = "Moage test String";

        public static void main(String[] args) {
            new Main();
        }

        public Main(){

            System.out.println("Default charset: "+Charset.defaultCharset());
            System.out.println("Teststring: "+testString);
            System.out.println();
            System.out.println("get the byteStreeam of the test String...");
            System.out.println();
            System.out.println("Bytestream with default encoding: ");
            for(int i = 0; i < testString.getBytes().length; i++){
                System.out.print(testString.getBytes()[i]);
            }
            System.out.println();
            System.out.println();
            System.out.println("Bytestream with encoding UTF-8: ");
            try {
                for(int i = 0; i < testString.getBytes("UTF-8").length; i++){
                    System.out.print(testString.getBytes("UTF-8")[i]);
                }
                System.out.println();
                System.out.println();
                System.out.println("Bytestream with encoding windows-1252 (default): ");

                for(int i = 0; i < testString.getBytes("windows-1252").length; i++){
                    System.out.print(testString.getBytes("windows-1252")[i]);
                }

                System.out.println();
                System.out.println();
                System.out.println("Bytestream with encoding UTF-16: ");

                for(int i = 0; i < testString.getBytes("UTF-16").length; i++){
                    System.out.print(testString.getBytes("UTF-16")[i]);
                }

            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
    }

所以我想看看utf-8编码和windows-1252之间的区别。但当我看输出时,似乎没有区别。只有当我将windows-1252与utf-16进行比较时,才会有区别。

输出:

> Default charset: windows-1252 Teststring: Moage test String
> 
> get the byteStreeam of the test String...
> 
> Bytestream with default encoding: 
> 7711197103101321161011151163283116114105110103
> 
> Bytestream with encoding UTF-8: 
> 7711197103101321161011151163283116114105110103
> 
> Bytestream with encoding windows-1252 (default): 
> 7711197103101321161011151163283116114105110103
> 
> Bytestream with encoding UTF-16: 
> -2-1077011109701030101032011601010115011603208301160114010501100103

谁能解释一下为什么utf-8和windows-1252看起来一样?

干杯Alex

共有2个答案

诸福
2023-03-14

在这里

您使用的字符串字符属于ASCII的范围。如果您的字符串包含任何特殊字符或支持特殊字符的语言,您的字节输出将被更改。

UTF-8是普遍认可的标准,适用于任何地方。但是,Windows-任何编码都是特定于Windows的,不能保证在任何机器上工作。

诸嘉澍
2023-03-14

这是因为您在测试字符串中只使用ASCII字符,在您的案例中是“Moage test String”,尝试使用特殊字符,例如“èè”,您将看到不同的结果。

 类似资料:
  • 描述 (Description) 此方法使用平台的默认字符集将此String编码为字节序列,并将结果存储到新的字节数组中。 语法 (Syntax) 以下是此方法的语法 - public byte[] getBytes() 返回值 (Return Value) 此方法返回结果字节数组。 例子 (Example) import java.io.*; public class Test { pu

  • 描述 (Description) 此方法使用命名的字符集将此String编码为字节序列,并将结果存储到新的字节数组中。 语法 (Syntax) 以下是此方法的语法 - public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 参数 (Parameters) 这是参数的细节 - charsetNam

  • 问题内容: 我想将Java中的类转换为C#,大部分更改已经完成,但是我不确定这部分。我想转换以下代码行: 我已经试过了: 但是它不能正常工作,因为GetBytes()期望翻倍。我不确定将其转换为双精度是否可以解决问题,所以我想在这里询问。 问题答案: 根据您的编码,您可以执行以下操作: 有关参考,请参见http://msdn.microsoft.com/zh- cn/library/ds4kkd5

  • 来自java。lang.StringCodeing: 这就是从Java.lang.getBytes()中使用的,在linux jdk 7中,我一直认为UTF-8是默认字符集? 谢啦

  • 3:String base64EncodedMessage=新字符串(Base64.EncodeBase64(encryptedMsgBytes)); 我需要使用Http Post在web上发送这些信息&将在另一端接收和处理(解密,从base64转换等)。 根据阅读文章,推荐的做法是在第2行使用.getBytes(“UTF-8”),即message.getBytes(“UTF-8”) 4:字符串b

  • 问题内容: UTF-8和UTF-16之间的区别?我们为什么需要这些? 问题答案: 我相信Web上有很多关于此的好文章,但这是一个简短的摘要。 UTF-8和UTF-16都是可变长度编码。但是,在UTF-8中,字符可能至少占据8位,而在UTF-16中,字符长度以16位开始。 UTF-8主要优点: 基本ASCII字符(例如数字,不带重音的拉丁字符等)占据一个字节,与US-ASCII表示形式相同。这样,所