Avatar billede slott_hansen Nybegynder
29. maj 2002 - 08:54 Der er 2 kommentarer og
1 løsning

Konvertering til UTF-8

Er det mig, eller er der bare ikke en elegant måde at konvertere fra ASCII til UTF-8 ?
Avatar billede lyhr007 Nybegynder
29. maj 2002 - 11:01 #1
http://www.geocities.com/SiliconValley/Network/4453/unipatch/

udklip derfra:

Converting to UTF-8
Well, just save your files as UTF-8 :-)

Seriously, if you need a utility to do this, I know of a sledgehammer to do it. If you download one of the Java JDK's from Sun, it comes with a utility for characterset converions: native2ascii. Just convert from whatever characterset to escaped ASCII, and then convert from escaped ASCII to UTF-8 using the "-reverse" and "-encoding UTF8" options.

http://java.sun.com/products/jdk/1.1/docs/tooldocs/win32/native2ascii.html


Håber det hjælper.
Avatar billede slott_hansen Nybegynder
29. maj 2002 - 11:19 #2
Doh, jeg glemte at skrive det var til JAVA - men nu er problemet løst på en mindre elegant måde ;-)
Avatar billede jakoba Nybegynder
29. maj 2002 - 12:59 #3
denneher er da en lille smule elegant :-))

Den skulle klare denorme UTF8 sekvenser, men der er ingen test for ulovlige sekvenser.

class CodeUTF8 {
 
  static int[] mask = new int[6];
 
  static byte[] head = new byte[6];
 
  public CodeUTF8() {
      mask[0] = 0x0000007F;
      mask[1] = 0x000003FF;
      mask[2] = 0x0000FFFF;
      mask[3] = 0x001FFFFF;
      mask[4] = 0x03FFFFFF;
      mask[5] = 0x7FFFFFFF;
      head[0] = (byte)0x00;
      head[1] = (byte)0xC0;
      head[2] = (byte)0xE0;
      head[3] = (byte)0xF0;
      head[4] = (byte)0xF8;
      head[5] = (byte)0xFC;
  } //end CodeUTF8 constructor
 
  public byte[] toUTF8 ( int bogstav ) {
      int idx = 0;
      while ( bogstav > mask[idx] ) idx++;
      byte[] res = new byte[idx+1];
      for (int i=idx; i>0; i-- ) {
        res[i] = (byte)( 0x80 | ( bogstav & 0x3F ) );
        bogstav /= 0x40;
      }
      res[0] = (byte)( head[idx] | bogstav );
      return res;
  } //end toUTF8
 
  public int fromUTF8 ( byte[] utf8code ) {
      int idx = 5;
      while ( head[idx] > utf8code[0] ) idx--;
      int bogstav = utf8code[0] - head[idx];
      for (int i=1; i<=idx; i++ ) {
        bogstav = bogstav*0x40 +(0x3F & utf8code[i]);
      }
      return bogstav;
  } //end fromUTF8
 
 
  // koden herunder er kun til test.
 
  public static void main( String[] argv ) {
     
      CodeUTF8 utf = new CodeUTF8();
      int iform;    // charanter as 32-bit positivt heltal
      byte[] uform;  // character as UTF-8 kodet sekvens
     
      iform = 0x01234567;
      uform = utf.toUTF8( iform );
      System.out.println( "toUTF8(" + Integer.toString( iform, 16 )
                        +") ->" +txBytes(uform) );
      if ( (iform = utf.fromUTF8(uform) ) != 0x01234567 ) {
        System.out.println( "\nder er noget rivendes galt." );
      } else {
        System.out.println( "\nDet ser da meget godt ud :-))" );
      }
      System.out.println( "fromUTF8(" +txBytes(uform)+ ") -> "
                        +Integer.toString( iform, 16 ) );
      uform = utf.toUTF8( iform );
      System.out.println( "toUTF8(" + Integer.toString( iform, 16 )
                        +") ->" +txBytes(uform) );
      if ( (iform = utf.fromUTF8(uform) ) != 0x01234567 ) {
        System.out.println( "\nder er noget rivendes galt." );
      } else {
        System.out.println( "\nDet ser da meget godt ud :-))" );
      }
      System.out.println( "fromUTF8(" +txBytes(uform)+ ") -> "
                        +Integer.toString( iform, 16 ) );
  }
  public static String txBytes ( byte[] bArr ) {
      String res = "" +Integer.toString( 0xFF & (int)bArr[0], 16 );
      for (int i=1; i<bArr.length; i++ ) {
        res += "," +Integer.toString( 0xFF & (int)bArr[i], 16 );
      }
      return res;
  } //end txBytes
     
 
}; //endclas CodeUTF8
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester