[JAVA] J2ME UTF8 in byte[] naar char[]

Pagina: 1
Acties:

  • TheOneLLama
  • Registratie: Oktober 2000
  • Laatst online: 20-01-2022

TheOneLLama

A llama like no llama before

Topicstarter
edit:

Via via met Google groups wat gevonden.. posting uit 1998 ofzo toen java 1.1 net nieuw was :)

http://savannah.gnu.org/cgi-bin/viewcvs/classpath/classpath/gnu/java/io/decode/DecoderUTF8.java?rev=1.3&content-type=text/vnd.viewcvs-markup


Het probleem is als volgt, normaal gebruik ik een InputStreamReader om uit een InputStream te lezen. Nu gaat het echter om een UTF8 stream, en
code:
1
new InputStreamReader(inputstream, "UTF8")

werkt niet op J2ME. Na wat lezen kom je er dus achter dat J2ME simpelweg geen UTF8 ondersteunt.

Dus dan maar gewoon een byte[] inlezen uit een inputstream en die handmatig omzetten naar char[]. Ik kan echter nog geen enkel voorbeeld programma vinden wat dit doet, omdat ze allemaal gebruik maken van de standaard functies van J2SE die J2ME dus niet heeft..

Het omgedraaide heb ik wel al (van char[] naar UTF8):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    public byte[] stringToUTF8(String s) {
        // determine how many bytes are needed for the complete conversion
        int bytesNeeded = 0;
        
        for (int i=0; i<s.length(); i++) {
            int k = s.charAt(i);
            if (k < 0x80) {
                ++bytesNeeded;
            }
            else if (k < 0x0800) {
                bytesNeeded += 2;
                }
            else if (k < 0x10000) {
                bytesNeeded += 3;
                }
            else {
                bytesNeeded += 4;
                }
            }
        // allocate a byte[] of the necessary size
        byte[] utf8 = new byte[bytesNeeded];
        // do the conversion from character code points to utf-8
        for(int i=0, bytes = 0; i<s.length(); i++) {
            int k = s.charAt(i);
            if(k < 0x80) {
                utf8[bytes++] = (byte)k;
                }
            else if (k < 0x0800) {
                utf8[bytes++] = (byte)(k >> 6 | 0xC0);
                utf8[bytes++] = (byte)(k & 0x3F | 0x80);
                }
            else if (k < 0x10000) {
                utf8[bytes++] = (byte)(k >> 12 | 0xE0);
                utf8[bytes++] = (byte)(k >> 6 & 0x3F | 0x80);
                utf8[bytes++] = (byte)(k & 0x3F | 0x80);
                }
            else {
                utf8[bytes++] = (byte)(k >> 18 | 0xF0);
                utf8[bytes++] = (byte)(k >> 12 & 0x3F | 0x80);
                utf8[bytes++] = (byte)(k >> 6 & 0x3F | 0x80);
                utf8[bytes++] = (byte)(k & 0x3F | 0x80);
                }
            }
        return utf8;
        }

Als iemand wel een voorbeeld weet ik hoor het graag!! Ook in een andere taal is goed dan kunnen we misschien proberen dat hier naar JAVA/J2ME om te zetten..

Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com