🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.tcl
5 messages
5 total messages Started by Googie Thu, 20 Jul 2006 21:49
sqlite, rivet i polskie znaki
#393
Author: Googie
Date: Thu, 20 Jul 2006 21:49
23 lines
1289 bytes
Witam,

Zapisałem sobie w bazie trochę danych, niektóre zawierają polskie
znaki. Zapisywałem je z interaktywnej powłoki tclsh:

$ tclsh
% package require sqlite
3.3.5
% sqlite db data.db
% db eval {INSERT INTO regions (name) VALUES ('Małopolskie')}

I po takiej operacji próbuję wydobyć te dane z poziomu Riveta i
wyświetlić je ordynarnym puts'em na stronie, ale dostaję krzaczki
zamiast polskich znaków.

Nie pomaga:
encoding system iso8859-2

Co więc jeszcze?

-- 
Pozdrawiam (Greetings)!
Googie
Re: sqlite, rivet i polskie znaki
#394
Author: Derek Kuliński / takeda
Date: Sun, 23 Jul 2006 17:52
32 lines
2073 bytes
On Thu, 20 Jul 2006 21:49:58 +0000, Googie wrote:

> Witam,
> 
> Zapisałem sobie w bazie trochę danych, niektóre zawierają polskie
> znaki. Zapisywałem je z interaktywnej powłoki tclsh:
> 
> $ tclsh
> % package require sqlite
> 3.3.5
> % sqlite db data.db
> % db eval {INSERT INTO regions (name) VALUES ('Małopolskie')}
> 
> I po takiej operacji próbuję wydobyć te dane z poziomu Riveta i
> wyświetlić je ordynarnym puts'em na stronie, ale dostaję krzaczki
> zamiast polskich znaków.
> 
> Nie pomaga:
> encoding system iso8859-2
> 
> Co więc jeszcze?

Emm pewnie i tak nie pomogę (za mało wiedzy :) ale mam wrażenie, że dużo
potrzebnych informacji do zdiagnozowania problemu pominąłeś.

Jakie kodowanie używa Riveta, czy pakiet sqlite faktycznie działa w unicode
itp itp...

-- 
ダレック
takeda@IRCnet.EFnet, ICQ# 15827691, YahooIM: takeda64
http://ircwiki.takeda.tk - strona wiki poświęcona IRC
Re: sqlite, rivet i polskie znaki
#396
Author: Derek Kuliński / takeda
Date: Sun, 23 Jul 2006 23:48
21 lines
2117 bytes
On Mon, 24 Jul 2006 00:12:44 +0000, Googie wrote:

>> Emm pewnie i tak nie pomogę (za mało wiedzy :) ale mam wrażenie, że
>> dużo potrzebnych informacji do zdiagnozowania problemu pominąłeś.
>> Jakie kodowanie używa Riveta, czy pakiet sqlite faktycznie działa w
>> unicode itp itp...
> Z tego co zdążyłem się już zorientować to problem tkwi w tym, że sqlite
> używa (tylko i wyłącznie) UTF-8 lub UTF-16, żadnych tam ISO8859-2. Po
> prostu źle wprowadziłem dane.

Ehh... :)))
Po cholerę sterczeć przy tym obleśnym ISO, powinno się używać wszędzie UTF
i nie będzie problemów z krzaczkami :)

Ale swoją drogą, sqlite powinien automatycznie się dostosowywać do
ustawionego kodowania i sam sobie odpowiednio tłumaczyć.

-- 
ダレック
takeda@IRCnet.EFnet, ICQ# 15827691, YahooIM: takeda64
http://ircwiki.takeda.tk - strona wiki poświęcona IRC
Re: sqlite, rivet i polskie znaki
#395
Author: Googie
Date: Mon, 24 Jul 2006 00:12
16 lines
1378 bytes
Derek Kuliński / takeda wrote:

> Emm pewnie i tak nie pomogę (za mało wiedzy :) ale mam wrażenie, że
> dużo potrzebnych informacji do zdiagnozowania problemu pominąłeś.
> 
> Jakie kodowanie używa Riveta, czy pakiet sqlite faktycznie działa w
> unicode itp itp...
> 

Z tego co zdążyłem się już zorientować to problem tkwi w tym, że sqlite
używa (tylko i wyłącznie) UTF-8 lub UTF-16, żadnych tam ISO8859-2. Po
prostu źle wprowadziłem dane.

-- 
Pozdrawiam (Greetings)!
Googie
Re: sqlite, rivet i polskie znaki
#397
Author: Artur
Date: Tue, 25 Jul 2006 09:10
52 lines
3071 bytes
Cześć!

Kodowanie znaków to staly problem.
Kilka informacji o kodowaniu i Tcl, które zebralem przy moich walkach
ze znakami.

Tcl zapisuje wewnętrznie znaki tylko w postaci UTF8.
Przy komunikowaniu z peryferią są one konwertowane wedlug ustawień w
encoding system
Przy tej okazji może się zdarzyć, że informacje mogą zostać
zgubione jeśli
na przyklad w ustawieniu encoding system jest iso8859-1 a wypisuje się
polskie znaki.

Wedlug dokumentacji każda bibliotheka Tcl w C powinna używać przy
komunikacji
z zewnątrz funkcji
Tcl_UtfToExternal lub Tcl_ExternalToUtf. To one biorą wartości
domyśle z (encoding system)
lub umozliwiać ustawienie encoding to jak jest to robi
fconfigure dla strumieni I/O.
Niestety te funkcje istnieją od Tcl8.0 i niektóre bibliteki ich nie
używają. Dla języków
zachodnioeuropejskich to żaden problem i dlatego autorom tych biblitek
to nie przeszkadza.

Tcl umożliwia też zapisanie danych binarnych w string.
Czyli można w pamięci Tcl skonwertować UTF8 na celowy encoding i
przez
to obejść jakby brak konwertowania przy zapisie IO.

to próba ze strumieniem do pliku

set t ś
set f [open test.txt w]
fconfigure $f -encoding binary
puts -nonewline [encoding convertto iso8859-2 $t]
close $f

w test.txt znajduje się jeden bajt w iso8859-2. Może to też dziala
dla sqlite.

Warto może by zerknąć do kodu źródlowego sqlite i poszykać jak to
jest rzeczywiście
jest robione. Tak jak powinno być, to jest widoczne przy originalnych
funkcjach I/O w Tcl.

Co do HTML to UTF8 jest bardzo dobry bo można wtedy bez problemu
mieszać kilka
jezyków jednocześnie. Oczywiście potrzebny jest w HEADER

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
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