Citat:
Ursprungligen postat av
hash
Ngon som kan bringa klarhet i detta?
![Grin](https://static.flashback.org/img/smilies2/grin.gif)
Vet inte om du tycker att detta klarnat via de svar du ftt, d de ibland varit otydliga och delvis missvisande.
Javas fundamentala datatyp fr detta, char, representerar alltid Unicode. Ingenting annat. Javas String likas. Glm encodingformat helt hr. (*1)
Nr man av ngot skl vill hantera tecken utanfr dessa typers runtimelagring, i ex en fil, en ntverksstrm eller annat, s behver man omvandla dessa till ett transportformat. Frst hr kommer encoding och olika format in i bilden.
De metoder som omvandlar tecken till ett transportformat eller tvrtom omvandlar allts frn Unicode till ett encodingformat eller tillbaka. Vissa dr man anger format via metodparametrar och vissa med defaultformat. Detta r vl dokumenterat i javadoc:en fr Java Core API och vl vrt att kolla upp. Typen Charset anvnds fr encodingformat.
Encodingformatet UTF-16 r frvisso vldigt nra Unicode i sin lagring, men det r fortfarande 2 olika saker.
Med detta som grund s kan vi g igenom dina exempel steg fr steg:
Citat:
Ursprungligen postat av
hash
Lste p ntet att en String i Java anvnder by default UTF-16 som encoding.
Om jag t ex konkatenerar en strng fljande.
Kod:
String myString = "test1 " + "test2";
I detta lget har allts myString encoding UTF-16.
Nej, den anvnder alltid Unicode. (*1)
Citat:
Ursprungligen postat av
hash
Om jag nu vill ha min strng som en ISO-8859-1, gr jag fljande...
Kod:
Charset iso88591charset = Charset.forName("ISO-8859-1");
byte[] iso88591bytes = myString.getBytes(iso88591charset);
String newMyString = new String ( iso88591bytes, iso88591charset );
Din myString r Unicode.
Anropet getBytes() ovan omvandlar frn Unicode till angivet format.
Din iso88591bytes r en array av bytes (inte tecken lngre) i encondingformatet "ISO-8859-1". (*2)
Konstruktorn ovan fr String omvandlar indata frn dess encodingformat till Unicode.
Din newMyString r Unicode.
Citat:
Ursprungligen postat av
hash
Vad hnder med min String om jag gr fljande eftert?
Kod:
String newString3 = newMyString.replaceAll("2", "3");
DIn newString3 r Unicode.
(*1): De r specificerat i Javas sprkdefinition att det r Unicode som representeras i char och String. ven om det r teoretiskt mjligt att enl specifikationen fullflja definitionen och nd lagra tecken internt i en String i ngot annat format, s spelar det ingen roll. Alla metoder som jobbar med typen char i String, jobbar med Unicode i sitt grnsssnitt.
(*2): Detta frutsatt att plattformen accepterade det format du angav. Vissa format mste stdjas enl standarden, bland annat ISO-8859-1.