2016-04-28 4 views
0

я следующий код, который производит запутанный выход ..В чем разница между getBytes («UTF-8»), getBytes («windows-1252») и getBytes()?

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. Но когда я смотрю на выход, кажется, что нет никакой разницы. Только когда я cdompare 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 и окна-1252 выглядит так же?

Приветствия Alex

+3

Поместите в тестовую строку некоторые специальные символы. Ваши текущие данные испытаний не отражают различия между кодировками. – f1sh

+0

uaaa спасибо !! Я никогда не думал, что это что-то изменит. :) Теперь есть некоторые отличия. – Mansouritta

ответ

3

Это потому, что вы используете только ASCII символы в тесте String, который находится в вашем случае "Moage test String", попробуйте с помощью специальных символов, таких как "éèà", например, вы увидите разные результаты.

0

Здесь

Вы использовали символы строки из которых принадлежит к диапазону ASCII. Если ваша строка содержит какой-либо специальный символ или язык, который поддерживает специальный символ Вы байт. Выход будет изменен.

UTF-8 обычно одобрен стандартом, который работает повсюду. Но Windows-любая кодировка зависит от Windows и не гарантирует работу на какой-либо машине.

Смежные вопросы