Я ввожу большие объемы данных в базу данных PostgreSQL с использованием Perl и Perl DBI. Я получаю ошибки, так как мой файл неправильно закодирован. У меня установлен кодировка PostgreSQL на «utf8» и используется команда debian «file», чтобы определить, что мой файл имеет «текст без ISO-ASCII с очень длинными строками с терминаторами строк CRLF», и когда я запускаю свою программу DBI выходит из строя из-за «неправильной последовательности байтов». Я уже добавил строку в моей программе Perl, чтобы передать карету '\ r' для ничего, но как я могу конвертировать мои файлы в 'utf8' или получить PostgreSQL для принятия моей кодировки файлов. Благодарю.Изменение кодировки файла для PostgreSQL с Perl
ответ
Когда вы connect to PostgreSQL с помощью DBI->connect(..., { pg_enable_utf8 => 1})
то данные, используемые во всех модифицирующих вызовов DBI (SQL INSERT
, UPDATE
, DELETE
, везде использовать заполнители в запросах и т.д.) должен быть закодирован во внутренней кодировке Perl, так что сама DBI может преобразовать в проводной протокол.
Существует множество способов, как вы можете достичь этого, и все они зависят от того, как вы читаете файл в первую очередь. Самый простой из них - если вы используете open
(или один из методов, основанных непосредственно на нем, как IO::File->open
). Затем вы можете использовать уровни ввода/вывода Perl (см. Ссылку open
выше), и пусть Perl сделает это за вас. Если предположить, что ваш файл кодируется в UTF-8 уже вы будете уйти с:
open(my $fh, "<:encoding(UTF-8)", "filename");
while (my $line = <$fh>) {
# process query
}
Это в основном эквивалентно открытия файла без слоя кодирования и преобразования вручную с помощью Encode::decode
, например, как это:
open(my $fh, "<", "filename");
while (my $line = <$fh>) {
$line = Encode::decode('UTF-8', $line);
# process query
}
Много других модулей, которые получают данные из внешних источников и вернуть его (думать о загрузке HTTP с LWP
, например) возвращаемые значения, которые уже были преобразованы во внутреннюю кодировку Perl.
Так что вы должны сделать, это:
- Выяснить, который кодирующая файл на самом деле использует (попробуйте использовать
iconv
на оболочке для этого) - Говори DBI для включения UTF-8
- Open файл с правильной кодировкой
- чтение линией (линиями), процесс запросом, повторите
- 1. Изменение кодировки текстового файла
- 2. изменение кодировки файла
- 3. Изменение кодировки файла в R
- 4. Изменение кодировки файла с помощью PHP
- 5. Изменение кодировки/кодировки при загрузке() в jQuery
- 6. Изменение кодировки файла csv в php
- 7. Perl: Изменение имени файла
- 8. Изменение кодировки ВСЕХ файлов
- 9. Изменение кодировки файла .csv до импорта MySQL
- 10. C# получение anc изменение кодировки файла
- 11. Изменение кодировки файла xml в php
- 12. Изменение кодировки файла в коде Visual Studio
- 13. изменение символов кодировки для Eclipse
- 14. Изменение кодировки списка объектов
- 15. Изменение кодировки в java
- 16. Изменение кодировки строки JavaScript
- 17. Изменение кодировки в Eclipse
- 18. Изменение кодировки сообщения MsmqIntegrationBinding
- 19. Изменение файла XML с использованием Perl
- 20. Изменение кодировки компиляции
- 21. изменение кодировки XML
- 22. Изменение кодировки файла с UTF16 на UTF8 в партии
- 23. MySQL вставляет изменение кодировки
- 24. Изменение кодировки многомерного массива
- 25. Изменение кодировки символов
- 26. Изменение кодировки HttpServletResponse
- 27. Изменение кодировки файлов данных SPSS
- 28. Изменение кодировки ответа WCF
- 29. Изменение кодировки текстового поля
- 30. Изменение кодировки python 3
'File' не будет надежно определить кодировку. Вам действительно нужно знать, что такое кодировка текста, чтобы правильно ее преобразовать. Если вы действительно не поняли, попробуйте использовать инструмент, который обеспечивает более надежное обнаружение кодировки, чем 'файл'. –