fileEncoding = "UTF-8" w R, i sprawdź polskie znaki zaraz po wczytaniu.Co to jest kodowanie UTF-8?
UTF-8 to sposób zapisu znaków Unicode w bajtach (ang. character encoding, kodowanie znaków), w którym jeden znak zajmuje od 1 do 4 bajtów (Yergeau, 2003). Znaki z zestawu ASCII, czyli litery bez ogonków, cyfry i interpunkcja, mają ten sam jednobajtowy kod co w ASCII. Polskie litery zajmują po dwa bajty. Nie myl tego z kodowaniem zmiennych, czyli nadawaniem odpowiedziom liczb lub etykiet.
Skąd się biorą „krzaczki”?
Plik tekstowy, np. plik CSV, nie zawiera informacji o tym, jak go zakodowano. Program, który go otwiera, musi to wiedzieć albo zgadywać, a kodowania 8-bitowego nie da się wykryć automatycznie z pewnością (R Core Team, 2026). Jeśli plik zapisano w UTF-8, a program czyta go jako Windows-1250 (starsze kodowanie polskiego Windowsa), polskie litery zamieniają się w pary obcych znaków. Odwrotna pomyłka daje bajty, których nie da się odczytać jako tekstu.
Przykład
Zdanie „Zażółć gęślą jaźń” ma 17 znaków, ale w UTF-8 zajmuje 26 bajtów, bo każda z 9 polskich liter to 2 bajty. W zapisie szesnastkowym litera „a” to bajt 61, a „ó” – para bajtów C3 B3. Gdy plik UTF-8 z nazwami miast wczytamy jako Windows-1250, „Kraków” zmienia się w „KrakĂłw”, a „Gdańsk” w „GdaĹ„sk”. W pliku zapisanym w Windows-1250 funkcja validUTF8() odrzuciła oba wiersze z polskimi literami. Po podaniu właściwego kodowania obie nazwy wczytały się poprawnie.
Jak tego uniknąć
- Zapisuj dane i skrypty w UTF-8 i wybieraj tę opcję przy eksporcie, jeśli program ją oferuje.
- W R podawaj kodowanie wprost:
read.csv("dane.csv", fileEncoding = "UTF-8"). Poprawna nazwa to „UTF-8”, a nie „utf8”. - Zaraz po imporcie obejrzyj kilka rekordów z polskimi znakami, zanim zaczniesz czyścić dane.
- Znacznik BOM w UTF-8 to zawsze bajty EF BB BF na początku pliku; nie jest potrzebny, ale część programów go dopisuje (Yergeau, 2003). Jeśli nazwa pierwszej kolumny ma dziwny przedrostek, użyj
fileEncoding = "UTF-8-BOM".
Jak opisać w pracy
Na co uważać
Nie poprawiaj „krzaczków” ręcznie, tylko wczytaj plik jeszcze raz z właściwym kodowaniem. Podręcznik R przestrzega też, że nie każdy program sam rozpozna plik UTF-8, więc przed przekazaniem danych sprawdź, w czym odbiorca je otworzy. Drogę od formularza do analizy pokazuje wpis Dane z Google Forms i LimeSurvey.
Kodowanie znaków w R
Kod liczy znaki i bajty w polskim zdaniu, pokazuje bajty dwóch liter i wczytuje ten sam plik CSV z błędnym i z poprawnym kodowaniem.
Plik UTF-8 odczytany jako Windows-1250 i odwrotnie
R
x <- "Zażółć gęślą jaźń" # 9 polskich liter
c(znaki = nchar(x), bajty = nchar(x, type = "bytes"))
charToRaw("a"); charToRaw("ó") # 1 bajt w ASCII, 2 bajty dla „ó”
dane <- data.frame(id = 1:2, miasto = c("Kraków", "Gdańsk"))
utf <- tempfile(fileext = ".csv")
write.csv(dane, utf, row.names = FALSE, fileEncoding = "UTF-8")
read.csv(utf, fileEncoding = "CP1250")$miasto # plik UTF-8 odczytany jako Windows-1250
read.csv(utf, fileEncoding = "UTF-8")$miasto # poprawne kodowanie
cp <- tempfile(fileext = ".csv")
write.csv(dane, cp, row.names = FALSE, fileEncoding = "CP1250")
validUTF8(readLines(cp)) # nagłówek i dwa wiersze danych
read.csv(cp, fileEncoding = "CP1250")$miastoWynik w R
znaki bajty
17 26
[1] 61
[1] c3 b3
[1] "Kraków" "Gdańsk"
[1] "Kraków" "Gdańsk"
[1] TRUE FALSE FALSE
[1] "Kraków" "Gdańsk"Bibliografia oprogramowania
Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (funkcje pakietów base i utils).
- R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
Najczęstsze pytania
Jak naprawić polskie znaki po wczytaniu pliku CSV do R?
Nie poprawiaj znaków ręcznie. Wczytaj plik jeszcze raz z właściwym argumentem fileEncoding, zwykle "UTF-8", a dla starszych plików z Windows "CP1250". Potem obejrzyj kilka rekordów z polskimi literami.
Czym różni się UTF-8 od Windows-1250?
Windows-1250 zapisuje każdy znak jednym bajtem i obejmuje tylko alfabety środkowoeuropejskie. UTF-8 obejmuje cały Unicode, a polskie litery zapisuje dwoma bajtami, więc te same bajty znaczą w obu kodowaniach co innego.
Czy plik w UTF-8 musi mieć znacznik BOM?
Nie. W UTF-8 BOM to zawsze bajty EF BB BF i nie jest potrzebny (Yergeau, 2003). Część programów go dopisuje; gdy w R psuje nazwę pierwszej kolumny, użyj fileEncoding = "UTF-8-BOM".
Powiązane hasła
Poradniki, w których użyjesz tego pojęcia
Dane z Google Forms i LimeSurvey: kodowanie do SPSS i R
Eksport, nazwy zmiennych, rekodowanie Likerta, pozycje odwrócone, wielokrotny wybór i braki – krok po kroku, z kodem R i wzorem książki kodowej.
Czytaj →PoradnikR dla początkujących
Od instalacji R i RStudio do pierwszego testu t: wczytanie CSV i .sav, ramka danych, wynik skali, statystyki opisowe, d Cohena. Dane i skrypt do pobrania.
Czytaj →Potrzebujesz wsparcia w analizie danych?
Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.
Wyceń analizęOferta dla studentówBibliografia i dalsza literatura naukowa (APA 7)
- R Core Team. (2026). R data import/export (Version 4.6.1). R Foundation for Statistical Computing. https://cran.r-project.org/doc/manuals/r-release/R-data.html ● Otwarty dostęp
- Yergeau, F. (2003). UTF-8, a transformation format of ISO 10646 (RFC 3629). RFC Editor. https://doi.org/10.17487/rfc3629 ● Otwarty dostęp: pełny tekst
Cytowania BibTeX
@techreport{rcoreteam2026rdata, author={{R Core Team}}, title={{R data import/export}}, year={2026}, institution={R Foundation for Statistical Computing}, url={https://cran.r-project.org/doc/manuals/r-release/R-data.html}}@techreport{yergeau2003utf8, author={Yergeau, Fran\c{c}ois}, title={{UTF-8, a transformation format of ISO 10646}}, year={2003}, institution={RFC Editor}, doi={10.17487/rfc3629}}