<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cases (Posty o unicode)</title><link>https://fizyk.dev/</link><description></description><atom:link href="https://fizyk.dev/pl/tags/unicode.xml" rel="self" type="application/rss+xml"></atom:link><language>pl</language><lastBuildDate>Sun, 21 Jun 2026 16:36:43 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Definiowanie kodowania w plikach źródłowych Pythona</title><link>https://fizyk.dev/pl/blog/definiowanie-kodowania-w-plikach-zrodlowych-pythona/</link><dc:creator>Grzegorz Śliwiński</dc:creator><description>&lt;div&gt;&lt;p&gt;Dlaczego definiowanie kodowania w pliku źródłowym Pythona jest istotne?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://fizyk.dev/pl/blog/definiowanie-kodowania-w-plikach-zrodlowych-pythona/"&gt;Czytaj więcej…&lt;/a&gt; (zostało 1 minut czytania)&lt;/p&gt;&lt;/div&gt;</description><category>pep</category><category>python</category><category>unicode</category><guid>https://fizyk.dev/pl/blog/definiowanie-kodowania-w-plikach-zrodlowych-pythona/</guid><pubDate>Sat, 31 Dec 2011 12:12:21 GMT</pubDate></item><item><title>Unicode a python</title><link>https://fizyk.dev/pl/blog/unicode-a-python/</link><dc:creator>Grzegorz Śliwiński</dc:creator><description>&lt;p&gt;Od paru miesięcy programuję w Pythonie. Najpierw oczywiście trzeba się
było Pythona nauczyć, zanim zacząłem w robocie dostawać pierwsze
zadania, ale źle nie było. Jedna rzecz mnie w Pythonie zdziwiła, a
mianowicie podejście do kodowania stringów. Zresztą, po dziś dzień
rozwiązanie tej kwestii w Pythonie sprawia mi niemały kłopot.&lt;/p&gt;
&lt;p&gt;Otóż w Pythonie, by ciąg znaków mógł zawierać wszelkie krzaczki i
ogonki, musi być unicodowym ciągiem znaków. Zwykłe stringi akceptują
tylko i wyłącznie znaki ASCII.&lt;/p&gt;
&lt;p&gt;I tak deklarując zmienną w kodzie, na pewno będzie stringiem.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code python"&gt;&lt;a id="rest_code_a1fd86cf4e9b4821b82fe649f497fe58-1" name="rest_code_a1fd86cf4e9b4821b82fe649f497fe58-1" href="https://fizyk.dev/pl/blog/unicode-a-python/#rest_code_a1fd86cf4e9b4821b82fe649f497fe58-1"&gt;&lt;/a&gt;&lt;span class="n"&gt;zmienna&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'łańcuch'&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Raczej bez różnicy, jakich znaków użyjemy. Jeśli jednak wartość zmienna
zostaje wczytana z zewnętrznego źródła danych, wtedy możemy napotkać
problem.&lt;/p&gt;
&lt;p&gt;Załóżmy teraz, że wczytujemy i przetwarzamy jakiś dokument XML, są one
kodowane przeważnie w utf-8. Wartości które będziemy przeważnie
przetwarzali zazwyczaj zmieszczą się w spektrum kodowania ASCII i ich
konwersja będzie jakby automatyczna, jednak co jakiś czas natrafimy w
pobieranych wartościach na polskie ogonki, czeskie ptaszki albo chińskie
krzaczki. Wtedy albo program się wywali (na naszym kodzie, np. złączeniu
łańcuchów) stwierdzając, że znak w łańcuchu jest spoza zakresu ASCII
(lub podobny błąd), albo błąd zwróci wywoływana przez nas funkcja.
jakkolwiek wydaje się to zabawne, spora część funkcji nie radzi sobie z
Unicode.&lt;/p&gt;
&lt;p&gt;Jak to obejść? Wyłapać się wszystkiego w czasie pisania nie da, można
chyba tylko przed wywołaniem, które zwraca błąd zastosować poniższą
konstrukcję:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code python"&gt;&lt;a id="rest_code_7f87b52067254644bc93dbe7df187593-1" name="rest_code_7f87b52067254644bc93dbe7df187593-1" href="https://fizyk.dev/pl/blog/unicode-a-python/#rest_code_7f87b52067254644bc93dbe7df187593-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;zmienna&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;unicode&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;a id="rest_code_7f87b52067254644bc93dbe7df187593-2" name="rest_code_7f87b52067254644bc93dbe7df187593-2" href="https://fizyk.dev/pl/blog/unicode-a-python/#rest_code_7f87b52067254644bc93dbe7df187593-2"&gt;&lt;/a&gt;    &lt;span class="n"&gt;zmienna&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;zmienna&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'utf-8'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Gdy po raz pierwszy spotkałem się z tym problemem, znalazłem informację
o możliwości zdefiniowania kodowania plików źródłowych:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code python"&gt;&lt;a id="rest_code_67c5c340c3e44a0bb72e1ad283ad8a46-1" name="rest_code_67c5c340c3e44a0bb72e1ad283ad8a46-1" href="https://fizyk.dev/pl/blog/unicode-a-python/#rest_code_67c5c340c3e44a0bb72e1ad283ad8a46-1"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ta konstrukcja służy jednak tylko i wyłącznie zdefiniowaniu kodowania
kodu źródłowego, nie kodowania używanego przez Pythona. Stąd w swoich
pierwszych programach napisanych w pythonie używałem sporo wywołań
metody encode i decode na stringu.&lt;/p&gt;</description><category>python</category><category>string</category><category>unicode</category><guid>https://fizyk.dev/pl/blog/unicode-a-python/</guid><pubDate>Sun, 06 Feb 2011 17:02:36 GMT</pubDate></item><item><title>Polskie znaki w MySQL, doctrine i symfony</title><link>https://fizyk.dev/pl/blog/polskie-znaki-w-mysql-doctrine-i-symfony/</link><dc:creator>Grzegorz Śliwiński</dc:creator><description>&lt;p&gt;Niejednokrotnie tworząc bazę danych w MySQL, nie trudno nie zauważyć, iż
w świeżej, nieskonfigurowanej instalacji tego systemu zarządzania bazą
danych, domyślnym typem kodowania nie jest
&lt;a class="reference external" href="http://pl.wikipedia.org/wiki/UTF-8"&gt;utf8&lt;/a&gt; tylko
&lt;a class="reference external" href="http://pl.wikipedia.org/wiki/ISO_8859-1"&gt;cp1252&lt;/a&gt;/&lt;a class="reference external" href="http://pl.wikipedia.org/wiki/ISO_8859-1"&gt;latin1_swedish&lt;/a&gt;.&lt;/p&gt;
&lt;!-- TEASE_END --&gt;
&lt;p&gt;Tworząc aplikację korzystającą z takiej bazy, a samej używającej
unicode, powinniśmy dla świętego spokoju sprawdzić i pilnować z jakiego
kodowania nasza baza danych korzysta. Choćby dlatego, że inna aplikacja
podłączona do takiej bazy danych może mieć problemy z rozpoznaniem i
połapaniem się w tej mieszance kodowań. Nie jest również zbyt
intuicyjnym przechowywanie ciągu znaków zakodowanego w
&lt;a class="reference external" href="http://pl.wikipedia.org/wiki/Unicode"&gt;unicode&lt;/a&gt;, w strukturze
używającej &lt;strong&gt;cp1252&lt;/strong&gt; lub innego systemu kodowania.&lt;/p&gt;
&lt;p&gt;Również symfony, z całym przywiązaniem do unicode, nie robi nic, by
wymusić stosowanie tego kodowanie w tworzonych poprzez doctrine
tabelach, czy też samym połączeniu na lini baza danych - aplikacja.
Konieczne jest ręczne ustawienie odpowiednich wartości w pliku
&lt;strong&gt;database.yml&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code yaml"&gt;&lt;a id="rest_code_5a7460472559478782e08a0c22e926d1-1" name="rest_code_5a7460472559478782e08a0c22e926d1-1" href="https://fizyk.dev/pl/blog/polskie-znaki-w-mysql-doctrine-i-symfony/#rest_code_5a7460472559478782e08a0c22e926d1-1"&gt;&lt;/a&gt;&lt;span class="nt"&gt;all&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_5a7460472559478782e08a0c22e926d1-2" name="rest_code_5a7460472559478782e08a0c22e926d1-2" href="https://fizyk.dev/pl/blog/polskie-znaki-w-mysql-doctrine-i-symfony/#rest_code_5a7460472559478782e08a0c22e926d1-2"&gt;&lt;/a&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;doctrine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_5a7460472559478782e08a0c22e926d1-3" name="rest_code_5a7460472559478782e08a0c22e926d1-3" href="https://fizyk.dev/pl/blog/polskie-znaki-w-mysql-doctrine-i-symfony/#rest_code_5a7460472559478782e08a0c22e926d1-3"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;class&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;sfDoctrineDatabase&lt;/span&gt;
&lt;a id="rest_code_5a7460472559478782e08a0c22e926d1-4" name="rest_code_5a7460472559478782e08a0c22e926d1-4" href="https://fizyk.dev/pl/blog/polskie-znaki-w-mysql-doctrine-i-symfony/#rest_code_5a7460472559478782e08a0c22e926d1-4"&gt;&lt;/a&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;param&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_5a7460472559478782e08a0c22e926d1-5" name="rest_code_5a7460472559478782e08a0c22e926d1-5" href="https://fizyk.dev/pl/blog/polskie-znaki-w-mysql-doctrine-i-symfony/#rest_code_5a7460472559478782e08a0c22e926d1-5"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;#...&lt;/span&gt;
&lt;a id="rest_code_5a7460472559478782e08a0c22e926d1-6" name="rest_code_5a7460472559478782e08a0c22e926d1-6" href="https://fizyk.dev/pl/blog/polskie-znaki-w-mysql-doctrine-i-symfony/#rest_code_5a7460472559478782e08a0c22e926d1-6"&gt;&lt;/a&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;attributes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_5a7460472559478782e08a0c22e926d1-7" name="rest_code_5a7460472559478782e08a0c22e926d1-7" href="https://fizyk.dev/pl/blog/polskie-znaki-w-mysql-doctrine-i-symfony/#rest_code_5a7460472559478782e08a0c22e926d1-7"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;default_table_charset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;utf8&lt;/span&gt;
&lt;a id="rest_code_5a7460472559478782e08a0c22e926d1-8" name="rest_code_5a7460472559478782e08a0c22e926d1-8" href="https://fizyk.dev/pl/blog/polskie-znaki-w-mysql-doctrine-i-symfony/#rest_code_5a7460472559478782e08a0c22e926d1-8"&gt;&lt;/a&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;default_table_collate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;utf8_general_ci&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;W ten sposób można w spokoju tworzyć aplikacje używające kodowania
unicode bez obawy wystąpienia błędu nieprawidłowego kodowania znaków w
porównaniu MySQL, lub innych niespodzianek z tym związanych.&lt;/p&gt;
&lt;p&gt;Z reguły znaki używane na zachodzie (znaki ASCII) są kodowane w ten sam
sposób w unicode jak i w cp1252/latin1, czego nie można powiedzieć o
polskich ogonkach, czy występujących w czeskim i innych
zachodniosłowiańskich językach ptaszkach (Przykład: Čech).&lt;/p&gt;</description><category>doctrine</category><category>mysql</category><category>symfony</category><category>unicode</category><category>utf8</category><guid>https://fizyk.dev/pl/blog/polskie-znaki-w-mysql-doctrine-i-symfony/</guid><pubDate>Sun, 09 May 2010 10:05:53 GMT</pubDate></item></channel></rss>