2016-12-02, 23:23
  #1
Medlem
Min kod:

[PHP] void write2File(){
try{
PrintWriter writer = new PrintWriter("output_file.txt", "UTF-8");
for (int i = 0 ; i< mapKeys.length; i++){
writer.println(mapKeys[i] + " " + map.get(mapKeys[i]));
}

writer.close();
} catch (IOException e) {
System.out.println("write2File exception found: " + e);
}
}[/PHP]

Problemet är alltså att när skiten skriver till filen så blir ÅÄÖ typ frågetecken eller annat märkligt.

Har googlat som en galning, hittar inget vettigt, någon skrev att man skulle byta till OutputStreamWriter men verkar inte ha någon effekt när jag provat. Finns det ingen enkel lösning på det här problemet!?
__________________
Senast redigerad av DavidLivingstone 2016-12-02 kl. 23:26.
Citera
2016-12-02, 23:35
  #2
Medlem
LeonVances avatar
Provat typ

Kod:
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(path),"UTF-8");

Du måste ange UTF-8 eftersom den standarden krävs för åäö.
Citera
2016-12-02, 23:36
  #3
Medlem
Citat:
Ursprungligen postat av LeonVance
Provat typ

Kod:
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(path),"UTF-8");

Du måste ange UTF-8 eftersom den standarden krävs för åäö.
Jag anger ju UTF-8 i min kod snippet om du kollar. Eller gör jag något fel?
Citera
2016-12-03, 07:55
  #4
Medlem
Kaustis avatar
Citat:
Ursprungligen postat av DavidLivingstone
Jag anger ju UTF-8 i min kod snippet om du kollar. Eller gör jag något fel?

Nu vet jag inte hur det är med Java, men i andra språk kan man behöva spara filen med rätt encoding också (editeraren du använder har i så fall en sån inställning). Annars kan filen sparas med en encoding men definiera en annan i koden.

Aja, har bråttom så hinner inte förklara mer. Kolla på det och citera om det inte löser problemet så kan jag se om jag kan förklara lite bättre.
Citera
2016-12-03, 11:23
  #5
Medlem
Citat:
Ursprungligen postat av DavidLivingstone
Jag anger ju UTF-8 i min kod snippet om du kollar. Eller gör jag något fel?
Ja UTF-8 är lämpligt val av encoding.
Bl.a för att Java är "plattformsoberoende" och ofta använt för webbapplikationer.

Men för att sedan läsa diskfilerna så behöver du också ha koll på vad ditt OS och det program du öppnar med, har för preferenser och inställningar.

Om du måste läsa filen på en Windowsdator, så rekommenderar jag LibreOffice.
Citera
2016-12-03, 12:59
  #6
Medlem
Protons avatar
Citat:
Ursprungligen postat av DavidLivingstone
Min kod:

[PHP] void write2File(){
try{
PrintWriter writer = new PrintWriter("output_file.txt", "UTF-8");
for (int i = 0 ; i< mapKeys.length; i++){
writer.println(mapKeys[i] + " " + map.get(mapKeys[i]));
}

writer.close();
} catch (IOException e) {
System.out.println("write2File exception found: " + e);
}
}[/PHP]

Problemet är alltså att när skiten skriver till filen så blir ÅÄÖ typ frågetecken eller annat märkligt.

Har googlat som en galning, hittar inget vettigt, någon skrev att man skulle byta till OutputStreamWriter men verkar inte ha någon effekt när jag provat. Finns det ingen enkel lösning på det här problemet!?
Ser ingenstans att du skriver till nån fil i den där koden.

Vad händer om du provar med en BufferedWriter?

https://www.mkyong.com/java/how-to-write-to-file-in-java-bufferedwriter-example/


Du kanske även kan kolla på http://stackoverflow.com/questions/1001540/how-to-write-a-utf-8-file-with-java om det hjälper?
Citera
2016-12-03, 15:08
  #7
Medlem
xitunos avatar
Om åäö blir konstiga tecken har du problem med teckenkodningen någonstans.

Det kan vara till exempel vara
  • i din editor, där du fick filen ifrån
  • i ditt program där du läser in filen
  • i ditt program där du skriver ut resultatet
  • i din terminal där du ser resultatet
  • i din editor där du titar på resultatet


Liten historielektion angående relevanta teckenkondingar i detta fall:

ASCII (American Standard Code for Information Interchange) togs fram på 60-talet och är en 7-bitars kod med totalt 128 värden som räcker till att beskriva A-Z, a-z, 0-9, en del specialtecken och styrkoder. Det finns inte plats för å, ä och ö.

ISO-8859-1 är en 8-bitars kod basserad på ASCII, men utökad så att det finns plats för å (0xE5), ä, (0xE4), ö (0xF6)

Windows-1252 är den teckenkodning som egentligen avses för text märkt som ISO-8859-1.

UTF-8 är en variabel 8-bitars-kodning på 1-4 bytes av Unicode (21-bitar), där de första 7 bitarna är samma som i ASCII. å = 0xC3 0xA5, ä= 0xC3 0xa4, ö= 0xC3 0xB6.

UCS-2 är en 16-bitars-kodning av Unicode, men kan inte beskriva alla tecken.

UTF-16 är en variabel 16-bitars-kodning av Unicode, som kan beskriva alla tecken.

UTF-32 är en 32-bitas-kodning av Unicode som kan beskriva alla tecken. Används ofta internt i miljöer för "wide strings".

Så blir det rapakalja när du skriver ut ett å har du fel kodning någonstans. Numera är det vanligt att spara och överföra text i UTF-8, men hantera det internt i programmet som UTF-32 (en del miljöer har fortfarande bara UCS-2)
Citera
2016-12-05, 19:52
  #8
Medlem
LeonVances avatar
Citat:
Ursprungligen postat av DavidLivingstone
Min kod:

[PHP] void write2File(){
try{
PrintWriter writer = new PrintWriter("output_file.txt", "UTF-8");
for (int i = 0 ; i< mapKeys.length; i++){
writer.println(mapKeys[i] + " " + map.get(mapKeys[i]));
}

writer.close();
} catch (IOException e) {
System.out.println("write2File exception found: " + e);
}
}[/PHP]

Problemet är alltså att när skiten skriver till filen så blir ÅÄÖ typ frågetecken eller annat märkligt.

Har googlat som en galning, hittar inget vettigt, någon skrev att man skulle byta till OutputStreamWriter men verkar inte ha någon effekt när jag provat. Finns det ingen enkel lösning på det här problemet!?

Hur visar du filen? Du kan behöva ändra till UTF-8 i t ex Notepad.
Citera
2016-12-27, 23:13
  #9
Medlem
ÅÄÖ har ingenting med OutputStreamWriter att göra. "An OutputStreamWriter is a bridge from character streams to byte streams". Men "ÅÄÖ" kan användas av strömmar som använder sig av "UTF8" eller "ISO-8859-1".
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in