Citat:
Ursprungligen postat av
hash
Någon som kan bringa klarhet i detta?
Vet inte om du tycker att detta klarnat via de svar du fått, då de ibland varit otydliga och delvis missvisande.
Javas fundamentala datatyp för detta, char, representerar alltid Unicode. Ingenting annat. Javas String likaså. Glöm encodingformat helt här. (*1)
När man av något skäl vill hantera tecken utanför dessa typers runtimelagring, i ex en fil, en nätverksström eller annat, så behöver man omvandla dessa till ett transportformat. Först här kommer encoding och olika format in i bilden.
De metoder som omvandlar tecken till ett transportformat eller tvärtom omvandlar alltså från Unicode till ett encodingformat eller tillbaka. Vissa där man anger format via metodparametrar och vissa med defaultformat. Detta är väl dokumenterat i javadoc:en för Java Core API och väl värt att kolla upp. Typen Charset används för encodingformat.
Encodingformatet UTF-16 är förvisso väldigt nära Unicode i sin lagring, men det är fortfarande 2 olika saker.
Med detta som grund så kan vi gå igenom dina exempel steg för steg:
Citat:
Ursprungligen postat av
hash
Läste på nätet att en String i Java använder by default UTF-16 som encoding.
Om jag t ex konkatenerar en sträng följande.
Kod:
String myString = "test1 " + "test2";
I detta läget har alltså myString encoding UTF-16.
Nej, den använder alltid Unicode. (*1)
Citat:
Ursprungligen postat av
hash
Om jag nu vill ha min sträng som en ISO-8859-1, gör jag följande...
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 från Unicode till angivet format.
Din iso88591bytes är en array av bytes (inte tecken längre) i encondingformatet "ISO-8859-1". (*2)
Konstruktorn ovan för String omvandlar indata från dess encodingformat till Unicode.
Din newMyString är Unicode.
Citat:
Ursprungligen postat av
hash
Vad händer med min String om jag gör följande efteråt?
Kod:
String newString3 = newMyString.replaceAll("2", "3");
DIn newString3 är Unicode.
(*1): De är specificerat i Javas språkdefinition att det är Unicode som representeras i char och String. Även om det är teoretiskt möjligt att enl specifikationen fullfölja definitionen och ändå lagra tecken internt i en String i något annat format, så spelar det ingen roll. Alla metoder som jobbar med typen char i String, jobbar med Unicode i sitt gränsssnitt.
(*2): Detta förutsatt att plattformen accepterade det format du angav. Vissa format måste stödjas enl standarden, bland annat ISO-8859-1.