Avatar billede stenmadsen Nybegynder
29. juni 2003 - 12:44 Der er 6 kommentarer og
1 løsning

Skriv unicode streng som f.eks."abcd\u044F\u0449,ert\u0431\u043B"

Jeg skal danne flade filer til load af DB (Pointbase). Data er unicode encoded, og tegn udover ansi-tegn skal skrives i filen som \uxxxx for at load kan ske problemfrit. F.eks. skal strengen "abc??,ert??" skrives som "abc\u044F\u0449,ert\u0431\u043B". Skal jeg læse strengene char for char og teste med f.eks. isUnicodeIdentifierStart(char), eller har jeg overset en metode der kan klare dette.
Avatar billede _carsten Nybegynder
29. juni 2003 - 14:54 #1
Kan du ikke bare bruge, native2ascii :  http://java.sun.com/j2se/1.3/docs/tooldocs/win32/native2ascii.html

Bruger den selv tit til encoding fra whatEver til somethingElse og fra
somethingElse til whoKnows

Den konverterer hele filen.
Avatar billede _carsten Nybegynder
29. juni 2003 - 15:50 #2
Et eksempel

Ansi PC Til unicode:
c:\>native2ascii -encoding cp850 fraFilnavn tempFilnavn

Fra unicode til Windows Latin-1:
c:\>native2ascii -reverse -encoding cp1252 tempFilnavn finishFilnavn
Avatar billede arne_v Ekspert
29. juni 2003 - 16:17 #3
Et kode eksempel:

public class UnicodeEscape {
    public static void main(String[] args) {
        test("abc");
        test("æøå");
        test("abc\u1234\u5678\u9ABCæøå");
        test("abcd\u044F\u0449,ert\u0431\u043B");
    }
    private static void test(String s) {
        String s2 = encode(s);
        System.out.println(s + "(" + s.length() + ") -> " +
                          s2 + "(" + s2.length() + ")");
    }
    public static String encode(String s) {
        StringBuffer sb = new StringBuffer("");
        for(int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if((c >= 0) && (c <=255)) {
                sb.append(c);
            } else {
                String hex = Integer.toHexString(c);
                sb.append("\\u" + "0000".substring(hex.length(), 4) + hex);
            }
        }
        return sb.toString();
    }
}
Avatar billede arne_v Ekspert
29. juni 2003 - 16:17 #4
Output:

abc(3) -> abc(3)
æøå(3) -> æøå(3)
abc???æøå(9) -> abc\u1234\u5678\u9abcæøå(24)
abcd??,ert??(12) -> abcd\u044f\u0449,ert\u0431\u043b(32)
Avatar billede stenmadsen Nybegynder
30. juni 2003 - 00:45 #5
Tak for svarene.

Java har efterhånden fået hånd om internationaliseringen, men jeg synes stadig, at jeg bruger en del spildtid på at løse konverteringsproblemer når der er flere produkter involveret. Jeg håbede, at Pointbase database-serveren kunne spare mig for dette, da den er kodet i Java. Men der mangler vist stadig et på versioner, før dette er nået. Du kan f.eks. tast unicode tekst ind i GUI-consolen, men gemmer du din query, gemmes det i ansi!

Carsten, jeg havde ikke set at Java SDK indeholdt native2ascii.exe. Den ser ud til at kunne klare jobbet, med følgende bemærkninger

Gemmes tekst i Win XP (f.eks. med notepad)

a) som unicode, får tekst-filen en to byte header FF FE.
Med kommandoen native2ascii -encoding unicode testunicode_in.txt testunicode_out.txt får jeg det ønskede resultat. Men hvis jeg 'glemmer' encoding-option'en så oversætter programmet headeren FF FE, mens resten blot kopieres!

b) som utf-8, får tekst-filen en tre byte header EF BB BF.
Kommandoen native2ascii -encoding utf8 testutf8_in.txt testutf8_out.txt oversætter alt incl. headeren.
Fjernes headeren inden konverteringen får jeg det ønskede output, også selv om jeg glemmer -encoding option'en

Metoden er fin til de indledende tests, men jeg vil nok ende op med at benytte Arne's forslag, da jeg bl. a. også ønsker at styre "" omkring tekst. Derfor er der 15 point til jer hver.
Avatar billede stenmadsen Nybegynder
30. juni 2003 - 00:48 #6
Karsten, du har sendt dine svar som kommentarer. Jeg kan derfor ikke tildele dig point. Send et 'dummy'-svar, så får du dine 15 points.
Avatar billede arne_v Ekspert
30. juni 2003 - 08:24 #7
Jeg synes faktisk at der stadig er mange karakter-sæts problemer
specielt med UTF-8 versus ISO-8859-1 på Linux.
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