nieprawidłowa sekwencja bajtów dla kodowania " UTF8"
Próbuję zaimportować niektóre dane do mojej bazy danych. Więc stworzyłem tymczasową tabelę,
create temporary table tmp(pc varchar(10), lat decimal(18,12), lon decimal(18,12), city varchar(100), prov varchar(2));
A teraz próbuję zaimportować Dane ,
copy tmp from '/home/mark/Desktop/Canada.csv' delimiter ',' csv
Ale wtedy dostaję błąd,
ERROR: invalid byte sequence for encoding "UTF8": 0xc92c
Jak to naprawić? Czy muszę zmienić kodowanie całej bazy danych (jeśli tak, to jak?) Czy Mogę zmienić tylko kodowanie mojej tmp
tabeli? A może powinienem spróbować zmienić kodowanie pliku? 16 answers
Jeśli chcesz przechowywać dane UTF8 w swojej bazie danych, potrzebujesz bazy danych, która akceptuje UTF8. Możesz sprawdzić kodowanie swojej bazy danych w pgAdmin. Wystarczy kliknąć prawym przyciskiem myszy bazę danych i wybrać "Właściwości".
Ale ten błąd zdaje się wskazywać, że w Twoim pliku źródłowym są nieprawidłowe dane UTF8. Oznacza to, że narzędzie copy
wykryło lub domyśliło się, że podajesz mu plik UTF8.
Jeśli używasz jakiegoś wariantu Uniksa, możesz sprawdzić kodowanie (więcej lub mniej) z file
użyteczność.
$ file yourfilename
yourfilename: UTF-8 Unicode English text
(myślę, że to zadziała również na komputerach Mac w terminalu.) Nie wiem jak to zrobić pod Windows.
Jeśli używasz tego samego narzędzia na pliku pochodzącym z systemów Windows (tj. pliku, który jest , a nie zakodowanym w UTF8), prawdopodobnie pokaże coś takiego:
$ file yourfilename
yourfilename: ASCII text, with CRLF line terminators
Jeśli sytuacja pozostanie dziwna, możesz spróbować przekonwertować dane wejściowe na znane kodowanie, aby zmienić kodowanie klienta lub jedno i drugie. (Jesteśmy naprawdę rozciąganie granic mojej wiedzy na temat kodowania.)
Możesz użyć iconv
narzędzie do zmiany kodowania danych wejściowych.
iconv -f original_charset -t utf-8 originalfile > newfile
Możesz zmienić kodowanie psql (klienta) postępując zgodnie z instrukcjami Obsługa zestawu znaków . Na tej stronie wyszukaj frazę "aby włączyć automatyczną konwersję zestawu znaków".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-11 20:03:57
psql=# copy tmp from '/path/to/file.csv' with delimiter ',' csv header encoding 'windows-1251';
Dodanie opcji encoding
zadziałało w moim przypadku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-21 21:23:08
Najwyraźniej mogę po prostu ustawić kodowanie w locie,
set client_encoding to 'latin1'
A następnie uruchom ponownie zapytanie. Nie jestem jednak pewien, jakiego kodowania powinienem używać.
latin1
sprawiły, że znaki były czytelne, ale większość znaków akcentowanych była w wielkich literach, gdzie nie powinny być. Założyłem, że było to spowodowane złym kodowaniem, ale myślę, że to rzeczywiście dane, które były po prostu złe. Skończyło się na zachowaniu kodowania latin1, ale wstępne przetwarzanie danych i Naprawiono problemy z obudową.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-23 20:44:54
Ten błąd oznacza, że kodowanie rekordów w pliku różni się w odniesieniu do połączenia. W tym przypadku iconv może zwrócić błąd, czasami nawet pomimo flagi / / IGNORE:
Iconv-f ASCII-t utf-8 / / ignoruj /a.txt
Iconv: nielegalna Sekwencja wejściowa na pozycji (pewna liczba)
Sztuczka polega na znalezieniu niewłaściwych znaków i zastąpieniu ich. Aby to zrobić na Linuksie Użyj edytora "vim":
Vim (Twój plik tekstowy), naciśnij przycisk" ESC": i wpisz": goto (liczba zwrócona przez iconv) "
Aby znaleźć znaki spoza ASCII, możesz użyć następującego polecenia:
Grep --color = 'auto' - P "[\x80 - \xFF]"
Jeśli usuniesz nieprawidłowe znaki sprawdź, czy naprawdę potrzebujesz przekonwertować swój plik: prawdopodobnie problem jest już rozwiązany.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-11 09:07:13
To zależy od typu maszyny / kodowania wygenerowanego pliku importu.
Jeśli otrzymujesz go z angielskiej lub zachodnioeuropejskiej wersji systemu Windows, najlepszym rozwiązaniem jest ustawienie go na 'WIN1252'. Jeśli otrzymujesz go z innego źródła, zapoznaj się z listą kodowań znaków tutaj:
Http://www.postgresql.org/docs/8.3/static/multibyte.html
Jeśli otrzymujesz go z komputera Mac, być może będziesz musiał najpierw uruchomić go za pomocą narzędzia "iconv", aby Konwertuj go z Macromana na UTF-8.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-01 20:08:34
Cóż, miałem ten sam problem. A co rozwiązało mój problem to:
W Excelu kliknij Zapisz jako. Z opcji Zapisz jako typ wybierz .csv Kliknij na Narzędzia . Następnie wybierz web options z rozwijanej listy. W zakładce Encoding zapisz dokument jako Unicode (UTF-8) . Kliknij OK. Zapisz plik. Zrobione !
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-26 20:43:48
Znak ukośnika wstecznego można zastąpić, na przykład, znakiem rury, sed.
sed -i -- 's/\\/|/g' filename.txt
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-14 22:23:11
Wykonaj poniższe kroki, aby rozwiązać ten problem w pgadmin:
SET client_encoding = 'ISO_8859_5';
COPY tablename(column names) FROM 'D:/DB_BAK/csvfilename.csv' WITH DELIMITER ',' CSV ;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-29 17:33:40
Miałem ten sam problem i znalazłem tu dobre rozwiązanie: http://blog.e-shell.org/134
Jest to spowodowane niedopasowaniem w kodowaniu bazy danych, z pewnością dlatego, że baza danych, z której otrzymałeś zrzut SQL, została zakodowana jako SQL_ASCII, podczas gdy nowa jest zakodowana jako UTF8. .. Recode to małe narzędzie projektu GNU, które pozwala na zmianę kodowania danego pliku w locie.
Więc po prostu przekodowałem plik dumpfile zanim go odtworzyłem wstecz:
postgres> gunzip -c /var/backups/pgall_b1.zip | recode iso-8859-1..u8 | psql test
W systemach Debian lub Ubuntu, recode można zainstalować za pomocą pakietu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-13 04:34:32
Jeśli nie masz nic przeciwko odrzuceniu niezniszczalnych znaków, możesz użyć -c
flagi
iconv -c -t utf8 filename.csv > filename.utf8.csv
A następnie skopiuj je do swojej tabeli
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-03 12:03:47
W Pythonie musisz użyć
Klasa pg8000.typy.Bytea (str) Bytea jest klasą pochodną str, która jest mapowana do tablicy bajtów PostgreSQL.
LUB
Pg8000Binary (wartość) Zbuduj obiekt zawierający dane binarne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-18 11:09:46
copy tablename from 'filepath\filename' DELIMITERS '=' ENCODING 'WIN1252';
Możesz spróbować obsłużyć kodowanie UTF8.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-04 07:00:38
Ten błąd może wystąpić, jeśli Dane wejściowe zawierają sam znak escape. Domyślnie znakiem escape jest symbol"\", więc jeśli tekst wejściowy zawiera znak " \ " - spróbuj zmienić wartość domyślną za pomocą opcji ESCAPE.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-27 11:08:11
Jest również bardzo możliwe z tym błędem, że pole jest zaszyfrowane w miejscu. Upewnij się, że patrzysz na właściwą tabelę, w niektórych przypadkach administratorzy utworzą niezaszyfrowany widok, którego możesz użyć zamiast niego. Ostatnio napotkałem bardzo podobny problem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-08 20:38:40
Otrzymałem ten sam błąd, gdy próbowałem skopiować plik csv wygenerowany przez Excela do tabeli Postgres (wszystko na komputerze Mac). Tak to rozwiązałem:
1) Otwórz plik w atomie (IDE którego używam)
2) Dokonaj nieznacznej zmiany w pliku. Zapisz plik. Cofnij zmianę. Zapisz ponownie.
Presto! Polecenie kopiowania zadziałało.
(myślę, że Atom zapisał to w formacie, który zadziałał)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-27 07:10:34
Otwórz plik CSV za pomocą Notepad++ . Wybierz menu Encoding
\ Encoding in UTF-8
, następnie napraw kilka komórek ręcznie.
Następnie spróbuj ponownie zaimportować.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-19 03:19:16