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
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