Difference between revisions of "Character encoding"
(→check 2) |
(→check 4) |
||
(5 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
= Geschiedenis = |
= Geschiedenis = |
||
Het probleem van vandaag is dat er pas laat een goede bruikbare open standaard is gekomen: http://en.wikipedia.org/wiki/UTF-8<br/> |
Het probleem van vandaag is dat er pas laat een goede bruikbare open standaard is gekomen: http://en.wikipedia.org/wiki/UTF-8<br/> |
||
− | Hierdoor moeten we vandaag de dag systemen op elkaar aansluiten die historisch gezien met verschillende character encodings werken, waardoor telkens |
+ | Hierdoor moeten we vandaag de dag systemen op elkaar aansluiten die historisch gezien met verschillende character encodings werken, waardoor telkens verwarring en de noodzaak tot conversie bestaat. De beste benadering is om alles op een enkele standaard te standaardiseren, bijvoorbeeld UTF-8. |
+ | |||
= Character encoding van een bestand = |
= Character encoding van een bestand = |
||
Onder Linux heb je verschillende character encoding commando's voor bestanden: |
Onder Linux heb je verschillende character encoding commando's voor bestanden: |
||
Line 18: | Line 19: | ||
maakt van een bestand met ISO8859 character encoding een bestand met UTF-8 encoding aan. |
maakt van een bestand met ISO8859 character encoding een bestand met UTF-8 encoding aan. |
||
== AIX == |
== AIX == |
||
− | Het commando file is ook op AIX aanwezig, maar |
+ | Het commando file is ook op AIX aanwezig, maar het programma geeft altijd terug: |
bestandsnaam.txt: ASCII text |
bestandsnaam.txt: ASCII text |
||
ongeacht de character encoding van het bestand. |
ongeacht de character encoding van het bestand. |
||
Line 55: | Line 56: | ||
</pre> |
</pre> |
||
− | = check 3 = |
+ | == check 3 == |
<pre> |
<pre> |
||
import java.io.FileWriter; |
import java.io.FileWriter; |
||
Line 71: | Line 72: | ||
} |
} |
||
</pre> |
</pre> |
||
+ | |||
− | = check 4 = |
||
+ | == check 4 == |
||
<pre> |
<pre> |
||
− | this is |
+ | this is the program that I run on test |
import java.io.BufferedWriter; |
import java.io.BufferedWriter; |
||
import java.io.FileWriter; |
import java.io.FileWriter; |
||
Line 91: | Line 93: | ||
} |
} |
||
</pre> |
</pre> |
||
+ | <hr> |
||
+ | Terug naar: [[Webhuis Infrastructuur]] |
Latest revision as of 13:34, 29 October 2012
Character encoding levert bij de uitwisseling tussen verschillende systemen problemen op. Linux, AIX en Sun Solaris gedragen zich anders.
Contents
Geschiedenis
Het probleem van vandaag is dat er pas laat een goede bruikbare open standaard is gekomen: http://en.wikipedia.org/wiki/UTF-8
Hierdoor moeten we vandaag de dag systemen op elkaar aansluiten die historisch gezien met verschillende character encodings werken, waardoor telkens verwarring en de noodzaak tot conversie bestaat. De beste benadering is om alles op een enkele standaard te standaardiseren, bijvoorbeeld UTF-8.
Character encoding van een bestand
Onder Linux heb je verschillende character encoding commando's voor bestanden:
- file
- enca
- iconv
martin@host:~$ file bestandsnaam.txt bestandsnaam.txt: HTML document text, ISO-8859 text martin@host:~$ enca -L bestandsnaam.txt transformation format 8 bits; CP1251
Met het commando iconv zet je een bestand om van de ene character encoding naar de andere, bijvoorbeeld:
iconv -f ISO8859-15 -t UTF-8 bestandsnaam.txt -o bestandsnaam-utf-8.txt
maakt van een bestand met ISO8859 character encoding een bestand met UTF-8 encoding aan.
AIX
Het commando file is ook op AIX aanwezig, maar het programma geeft altijd terug:
bestandsnaam.txt: ASCII text
ongeacht de character encoding van het bestand.
checks
Java biedt de mogelijkheid om de correcte character encoding van bestanden vast te stellen. Onder staan enkele voorbeelden.
check 1
So if I compile this, we can check.
public class CharSetTest { public static void main(String[] args) { System.out.println("Default Charset=" + Charset.defaultCharset()); System.setProperty("file.encoding", "Latin-1"); System.out.println("file.encoding=" + System.getProperty("file.encoding")); System.out.println("Default Charset=" + Charset.defaultCharset()); System.out.println("Default Charset in Use=" + getDefaultCharSet()); } private static String getDefaultCharSet() { OutputStreamWriter writer = new OutputStreamWriter(new ByteArrayOutputStream()); String enc = writer.getEncoding(); return enc; } }
check 2
try this simple program import java.io.FileWriter; import java.io.IOException; public class Test { public static void main(String args[]) throws IOException { FileWriter filewrt = new FileWriter("out"); String defaultcharset = filewrt.getEncoding(); filewrt.close(); System.out.println("Default encoding is :" + defaultcharset); } }
check 3
import java.io.FileWriter; import java.io.IOException; import java.util.Locale; public class Test { public static void main(String args[]) throws IOException { FileWriter filewrt = new FileWriter("out"); String defaultcharset = filewrt.getEncoding(); filewrt.close(); System.out.println("Default encoding is :" + defaultcharset); Locale locale = Locale.getDefault(); System.out.println(locale); } }
check 4
this is the program that I run on test import java.io.BufferedWriter; import java.io.FileWriter; public class FileWrite { public static void main(String args[]) { try { // Create file FileWriter fstream = new FileWriter("out.txt"); BufferedWriter out = new BufferedWriter(fstream); out.write("Damásio Pinto Do Carmo"); // Close the output stream out.close(); } catch (Exception e) {// Catch exception if any System.err.println("Error: " + e.getMessage()); } } }
Terug naar: Webhuis Infrastructuur