🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.java
12 messages
12 total messages Started by Mark Wed, 09 Nov 2011 16:04
kodowania znaków
#153112
Author: Mark
Date: Wed, 09 Nov 2011 16:04
21 lines
2019 bytes
Cześć,

Chciałbym przechowywać w plikach Stringi, które zawierają text w
bardzo wielu językach: polski, niemiecki, norweski, rosyjski, arabski,
chiński itp.
Rozumiem, że plik tekstowy powinien mieć kodowanie UTF-8, aby znaki
były poprawnie zapisane.
Jednak gdy wykonuję taki oto kod (na windows - nie wiem czy ma to
znaczenie):

try {
BufferedWriter out = new BufferedWriter(new FileWriter("test.txt"));
out.write("mój text ze znakami narodowymi");
out.close();
} catch (IOException e) { }

dostaję na dysku plik, który gdy po otwarciu w Notepad/Notepad++ ma
kodowanie ANSI. Czy jest możliwość wymuszenia na javie kodowania na
pliku ? Dlaczego domyślnie zostało wybrane kodowanie ANSI ?

Dzięki za podpowiedź
Re: kodowania znaków
#153113
Author: Jacek Czerwinski
Date: Wed, 09 Nov 2011 16:49
26 lines
2023 bytes
W dniu 2011-11-09 17:04, Mark pisze:

>
> try {
> BufferedWriter out = new BufferedWriter(new FileWriter("test.txt"));
> out.write("mój text ze znakami narodowymi");
> out.close();
> } catch (IOException e) { }
>

Wiele z podobnych operacji zapisu/odczytu na drugą wersję z argumentem 
String strona kodowa (ale FileWriter nie). Typowo to powinien być 
unikod, ale już widziałem dziwy w życiu.
http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileWriter.html

Wyższą szkołą jazdy jest dostarczenie Javie swoich stron kodowych (np. 
jako polski programista często podłączam Mazovię)

> dostaję na dysku plik, który gdy po otwarciu w Notepad/Notepad++ ma
> kodowanie ANSI. Czy jest możliwość wymuszenia na javie kodowania na
> pliku ? Dlaczego domyślnie zostało wybrane kodowanie ANSI ?

Plik sam w sobie (z wyjątkiem unikodu z bajtami początkowymi zw. BOM, 
ale nie musi ich być) nie ma zapisanego jakiegoś kodowania. Pytanie do 
twórców Notepada (zwłaszcza że nie am czego takiego jak kodowanie ANSI).
PS. Zmien edytor na jakiś rozsądny dla programistów, Scite, Crimson,
Re: kodowania znaków
#153115
Author: Jacek Czerwinski
Date: Wed, 09 Nov 2011 16:59
8 lines
1202 bytes
W dniu 2011-11-09 17:59, Tomek Łabuz pisze:

>
> hmmm, a myślałem, że wystarczy
> http://download.oracle.com/javase/1.4.2/docs/api/java/io/OutputStreamWriter.html

Chciałem zostawić przyjemność przeczytanie pierwszej linijki JavaDoca 
pytającemu ;) Dokładnie ta klasa jest wskazana
Re: kodowania znaków
#153114
Author: Tomek Łabuz
Date: Wed, 09 Nov 2011 16:59
22 lines
1724 bytes
W dniu 2011-11-09 17:49, Jacek Czerwinski pisze:
> W dniu 2011-11-09 17:04, Mark pisze:
> 
>>
>> try {
>> BufferedWriter out = new BufferedWriter(new FileWriter("test.txt"));
>> out.write("mój text ze znakami narodowymi");
>> out.close();
>> } catch (IOException e) { }
>>
> 
> Wiele z podobnych operacji zapisu/odczytu na drugą wersję z argumentem
> String strona kodowa (ale FileWriter nie). Typowo to powinien być
> unikod, ale już widziałem dziwy w życiu.
> http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileWriter.html
> 
> Wyższą szkołą jazdy jest dostarczenie Javie swoich stron kodowych (np.
> jako polski programista często podłączam Mazovię)


hmmm, a myślałem, że wystarczy
http://download.oracle.com/javase/1.4.2/docs/api/java/io/OutputStreamWriter.html
Re: kodowania znaków
#153116
Author: Tomek Łabuz
Date: Wed, 09 Nov 2011 17:04
14 lines
1461 bytes
W dniu 2011-11-09 17:59, Jacek Czerwinski pisze:
> W dniu 2011-11-09 17:59, Tomek Łabuz pisze:
> 
>>
>> hmmm, a myślałem, że wystarczy
>> http://download.oracle.com/javase/1.4.2/docs/api/java/io/OutputStreamWriter.html
>>
> 
> Chciałem zostawić przyjemność przeczytanie pierwszej linijki JavaDoca
> pytającemu ;) Dokładnie ta klasa jest wskazana

no wiem... ale jakoś nie wyczułem sarkazmu a tylko utyskiwanie o tym jak
to ciężko z tym przekazaniem strony kodowej...
:)
Re: kodowania znaków
#153117
Author: Mark
Date: Wed, 09 Nov 2011 23:38
11 lines
1839 bytes
On 9 Lis, 18:04, Tomek Łabuz <javatraini...@gmail.com> wrote:
[...]

OK, dzięki za wskazanie konkretnego rozwiązania jak zapisać plik w
jakimś kodowaniu.

Jednak jeśli zamierzam trzymać w jednym pliku znaki: polskie,
niemieckie, arabskie, perskie, chińskie itp. to rozumiem, że moim
wyborem kodowania powinno być "Unicode" a nie UTF-8 ?

Dzięki za pomoc
Re: kodowania znaków
#153118
Author: Jacek Czerwinski
Date: Thu, 10 Nov 2011 05:57
12 lines
1560 bytes
W dniu 2011-11-10 00:38, Mark pisze:
> On 9 Lis, 18:04, Tomek Łabuz<javatraini...@gmail.com>  wrote:
> [...]
>
> OK, dzięki za wskazanie konkretnego rozwiązania jak zapisać plik w
> jakimś kodowaniu.
>
> Jednak jeśli zamierzam trzymać w jednym pliku znaki: polskie,
> niemieckie, arabskie, perskie, chińskie itp. to rozumiem, że moim
> wyborem kodowania powinno być "Unicode" a nie UTF-8 ?

UTF_8 jest jednym z konkretnych kodowań w ogólnym pojęciu jakim jest unikod.
Re: kodowania znaków
#153119
Author: Hollow Quincy
Date: Sat, 12 Nov 2011 08:30
11 lines
1950 bytes
On 10 Lis, 06:57, Jacek Czerwinski <x...@y.z.pl> wrote:
> W dniu 2011-11-10 00:38, Mark pisze:
[...]

Wciąż nie jestem do końca przekonany jakiego kodowania powinienem
użyć. Powtórzę, że chcę użyć znaków z całego świata (Simplified
Chinese , Traditional Chinese, Perskie, Hindi i wiele innych).

Jakiego kodowania powinienem użyć UTF-8, UTF-16, Unicode,  ?

Dzięki za pomoc !
Re: kodowania znaków
#153120
Author: Jacek Czerwinski
Date: Sat, 12 Nov 2011 12:58
5 lines
1343 bytes
W dniu 2011-11-12 09:30, Hollow Quincy pisze:

> Jakiego kodowania powinienem użyć UTF-8, UTF-16, Unicode,
UTF-8 i UTF-16 to JEST Unicode.
Ewentualnie ja cię nie rozumiem.
Re: kodowania znaków
#153121
Author: Mark
Date: Sun, 13 Nov 2011 12:27
17 lines
2243 bytes
On 12 Lis, 13:58, Jacek Czerwinski <x...@y.z.pl> wrote:
> W dniu 2011-11-12 09:30, Hollow Quincy pisze:
>
> > Jakiego kodowania powinienem użyć UTF-8, UTF-16, Unicode,
>
> UTF-8 i UTF-16 to JEST Unicode.
> Ewentualnie ja cię nie rozumiem.

Ok, rzeczywiście z tym Unicode to głupoty opowiadałem.

Moim problemem jest wybranie kodowania pliku, który będzie zawierał
wszystkie litery świata. (Wydaje mi się, że gdzieś czytałem, że
Unicode sam w sobie nie zawiera liter chińskich)

Jakie kodowanie powinienem wybrać, żeby być w stanie przechowywać
_wszystkie_ (chińskie, hindi, rosyjskie, norweskie, japońskie itd)
znaki świata ?
Re: kodowania znaków
#153123
Author: nullpointer
Date: Sun, 13 Nov 2011 15:55
18 lines
2033 bytes
Zakładam że jesteś w stanie wygenerować jakoś taki plik. Wygeneruj, a 
potem podanym wyżej sposobem zapisz go w różnych kodowaniach (a 
następnie z tych kodowań odczytaj) i sprawdź czy:
  a) Po odczycie masz to co przed zapisem
  b) Pliki w różnych kodowaniach się czymś różnią (np rozmiarem)
     i czy Ci to przeszkadza

Zasadniczo UTF-8 powinien Ci wystarczyć. Idea tego kodowania polega na 
tym, że znaki (o ile się da) kodowane są na jednym bajcie, a jeśli się 
nie da, to masz w tekście potworki tylu 0x0123itd... które kodują znaki 
spoza 8-bitowego zestawu.

Dla UTF-16 każdy znak zapisywany jest na dwóch bajtach, więc pliki będą 
większe, a 16 bitów zdaje się i tak nie wyczerpuje wszystkich 
dopuszczalnych znaków.

-- 
npe
Re: kodowania znaków
#153122
Author: Paweł Kierski
Date: Sun, 27 Nov 2011 08:15
31 lines
2823 bytes
W dniu 2011-11-13 16:55, nullpointer pisze:
> Zakładam że jesteś w stanie wygenerować jakoś taki plik. Wygeneruj, a
> potem podanym wyżej sposobem zapisz go w różnych kodowaniach (a
> następnie z tych kodowań odczytaj) i sprawdź czy:
> a) Po odczycie masz to co przed zapisem
> b) Pliki w różnych kodowaniach się czymś różnią (np rozmiarem)
> i czy Ci to przeszkadza
>
> Zasadniczo UTF-8 powinien Ci wystarczyć. Idea tego kodowania polega na
> tym, że znaki (o ile się da) kodowane są na jednym bajcie, a jeśli się
> nie da, to masz w tekście potworki tylu 0x0123itd... które kodują znaki
> spoza 8-bitowego zestawu.
>
> Dla UTF-16 każdy znak zapisywany jest na dwóch bajtach, więc pliki będą
> większe, a 16 bitów zdaje się i tak nie wyczerpuje wszystkich
> dopuszczalnych znaków.

Nie do końca prawda - dla znaków z poza tzw. Basic Multilingual Plane
(np. hieroglifów egipskich) przewidziane jest kodowanie na 4 bajtach
w ramach UTF-16 (tzw. surogaty). Tym właśnie UTF-16 różni się od UCS-2.
UTF-16 potrafi (tak jak UTF-8, ale nie UCS-2) zapisać całą dziedzinę
znaków Unicode (aktualnie 2^21 o ile pamiętam).

Do bazowego pytania - jeśli znaków z poza ASCII będzie względnie mało,
a zależy na małym rozmiarze pliku, to UTF-8 jest najlepszym wyborem.
Jeśli dużo ma być znaków z CJK (Chińskie/Japońskie/Koreańskie), to UTF-8
będzie kodował te znaki na trzech bajtach, a UTF-16 - na 2.

-- 
     Paweł Kierski
     news@pkierski.net
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads