ufeff что это python
u ‘\ ufeff’ в строке Python
Я получаю сообщение об ошибке со следующим сообщением:
7 ответов
Символ Юникода U+FEFF является значком байтового байта или спецификацией и используется для указания разницы между big- и кодировкой маленького конца UTF-16. Если вы декодируете веб-страницу с помощью правильного кодека, Python удалит ее для вас. Примеры:
Обратите внимание, что EF BB BF представляет собой спецификацию с кодировкой UTF-8. Это не требуется для UTF-8, но служит только как подпись (обычно в Windows).
Обратите внимание, что для кодека utf-16 требуется наличие спецификации, или Python не будет знать, являются ли данные big- или little-endian.
Я столкнулся с этим на Python 3 и нашел этот вопрос (и решение). При открытии файла Python 3 поддерживает ключевое слово кодирования для автоматической обработки кодировки.
Без него спецификация включается в результат чтения:
Предоставляя правильное кодирование, спецификация в результате не указывается:
Только мои 2 цента.
Содержимое, которое вы очищаете, кодируется в формате unicode, а не в ascii, и вы получаете символ, который не преобразуется в ascii. Правильный «перевод» зависит от того, на что подумала оригинальная веб-страница. Страница юникода Python дает фон о том, как это работает.
Вы пытаетесь распечатать результат или вставить его в файл? Ошибка указывает на то, что он записывает данные, которые вызывают проблему, а не чтение. Этот вопрос является хорошим местом для поиска исправлений.
Этот символ является спецификацией или «Байт заказа». Он обычно принимается как первые несколько байтов файла, рассказывая вам, как интерпретировать кодировку остальных данных. Вы можете просто удалить символ для продолжения. Хотя, поскольку ошибка говорит о том, что вы пытаетесь преобразовать в ascii, вы, вероятно, должны выбрать другую кодировку для того, что вы пытались сделать.
U ‘\ ufeff’ в строке Python
Я получаю сообщение об ошибке со следующим сообщением:
Символ Юникода U+FEFF является значком байтового байта или спецификацией и используется для указания разницы между big- и кодировкой маленького конца UTF-16. Если вы декодируете веб-страницу с помощью правильного кодека, Python удалит ее для вас. Примеры:
Обратите внимание, что EF BB BF представляет собой спецификацию с кодировкой UTF-8. Это не требуется для UTF-8, но служит только как подпись (обычно в Windows).
Обратите внимание, что для кодека utf-16 требуется наличие спецификации, или Python не будет знать, являются ли данные big- или little-endian.
Я столкнулся с этим на Python 3 и нашел этот вопрос (и решение). При открытии файла Python 3 поддерживает ключевое слово кодирования для автоматической обработки кодировки.
Без него спецификация включается в результат чтения:
Предоставляя правильное кодирование, спецификация в результате не указывается:
Только мои 2 цента.
Содержимое, которое вы очищаете, кодируется в формате unicode, а не в ascii, и вы получаете символ, который не преобразуется в ascii. Правильный «перевод» зависит от того, на что подумала оригинальная веб-страница. Страница юникода Python дает фон о том, как это работает.
Вы пытаетесь распечатать результат или вставить его в файл? Ошибка указывает на то, что он записывает данные, которые вызывают проблему, а не чтение. Этот вопрос является хорошим местом для поиска исправлений.
Этот символ является спецификацией или «Байт заказа». Он обычно принимается как первые несколько байтов файла, рассказывая вам, как интерпретировать кодировку остальных данных. Вы можете просто удалить символ для продолжения. Хотя, поскольку ошибка говорит о том, что вы пытаетесь преобразовать в ascii, вы, вероятно, должны выбрать другую кодировку для того, что вы пытались сделать.
В python 3.5 он также отлично работает, и не только с ascii:
Remove the \ufeff character from any file that is read? #65
Comments
LinguList commented Nov 16, 2017
This happened in the concepticon-api, which uses clldutils, and I wonder, given that this usually leads to a long debugging session, whether we should not remove this character immediately if it occurs as the header? Or are there other preferred ways how to deal with it?
The text was updated successfully, but these errors were encountered:
xflr6 commented Nov 16, 2017
It’s a BOM, which technically is not needed for utf-8 but M$ (notepad?) had the idea to put it there anyway to indicate encoding.
Use encoding=’utf-8-sig’ when opening (that will just ignore it for you). See also https://docs.python.org/2/library/codecs.html#encodings-and-unicode
xrotwang commented Nov 16, 2017
Yeah, that’s probably an easy fix.
LinguList commented Nov 16, 2017
Excellent! But this should ideally just be done in clldutils, right?
xflr6 commented Nov 16, 2017
If the default is utf-8 there we could change it to utf-8-sig (but not for writing, right?), but I guess it is always better to be explicit about the encoding you use when opening a text file.
LinguList commented Nov 16, 2017
The problem is: whenever a user provides a textfile from notepad, and I want to read it as conceptlist in concepticon, it throws an error for the moment. And since concepticon uses the clldutils-api, it needs to be changed via the metadata-class in clldutils for reading tables, right? I can’t change the encoding from within concepticon.
xflr6 commented Nov 16, 2017
Ah, I do not know the exact api there yet. I think it should have an (optional) encoding= argument then either way (you might want to load files in other encodings).
LinguList commented Nov 16, 2017
So the class I’m talking about is here:
This class itself does not allow for defining encoding, I was just trying to figure out, where that happens.
LinguList commented Nov 16, 2017
I found the solution. This csvw with metadata is just great: added «utf-8-sig» to my dialect-specification, and all went fine 😉
LinguList commented Nov 16, 2017
I suggest I close this issue here and will just add this to the concepticon directly.
u ‘\ ufeff’ в строке Python
Я получаю сообщение об ошибке по следующей схеме:
6 ответов
Символ Unicode U+FEFF является меткой порядка байтов или спецификацией и используется для определения разницы между кодировкой UTF-16 с большим и младшим порядком байтов. Если вы декодируете веб-страницу, используя правильный кодек, Python удалит ее для вас. Примеры:
Обратите внимание, что EF BB BF является кодировкой UTF-8. Это не требуется для UTF-8, но служит только в качестве подписи (обычно в Windows).
Обратите внимание, что для utf-16 кодека требуется спецификация, иначе Python не узнает, являются ли данные большими или младшими порядковыми номерами.
Я столкнулся с этим на Python 3 и нашел этот вопрос (и решение). При открытии файла Python 3 поддерживает ключевое слово encoding для автоматической обработки кодировки.
Без этого спецификация включается в результат чтения:
При правильном кодировании спецификация опускается в результате:
Просто мои 2 цента.
Здесь основан на ответ от Марка Толонена. Строка включала в себя разные языки слова «тест», которые разделены знаком «|», так что вы можете увидеть разницу.
Вот тестовый прогон:
Содержимое, которое вы очищаете, кодируется в Unicode, а не в тексте ascii, и вы получаете символ, который не конвертируется в ascii. Правильный «перевод» зависит от того, что думала оригинальная веб-страница. Юникодная страница Python дает представление о том, как это работает.
Вы пытаетесь распечатать результат или вставить его в файл? Ошибка предполагает, что она записывает данные, вызывающие проблему, а не читает их. Этот вопрос является хорошим местом для поиска исправлений.
u’\ufeff’ в строке Python
Я получаю ошибку со следующей скороговоркой:
Символ Unicode U+FEFF является меткой порядка байтов, или BOM, и используется для различения между big- и little-endian кодировкой UTF-16. Если вы декодируете веб-страницу с помощью правильного кодека, Python удалит его за вас. Примеры:
Обратите внимание, что кодек utf-16 требует присутствия BOM, иначе Python не будет знать, являются ли данные big- или little-endian.
Я столкнулся с этим на Python 3 и нашел этот вопрос (и решение). При открытии файла Python 3 поддерживает ключевое слово encoding для автоматической обработки кодировки.
Без него BOM включается в результат чтения:
Если задать правильную кодировку, BOM будет опущен в результате:
Просто мои 2 копейки
Содержимое, которое вы копируете, закодировано в unicode, а не в ascii, и вы получаете символ, который не преобразуется в ascii. Правильный «перевод» зависит от того, что считала исходная веб-страница. Страница Python’s unicode дает представление о том, как это работает.
Эта проблема возникает, когда вы сохраняете код python в кодировке UTF-8 или UTF-16, потому что python автоматически добавляет специальный символ в начало кода (который не отображается в текстовых редакторах), чтобы определить формат кодировки. Но когда вы пытаетесь выполнить код, он выдает синтаксическую ошибку в строке 1, то есть в начале кода, потому что компилятор python понимает кодировку ASCII. При просмотре кода файла с помощью функции read() в начале возвращаемого кода отображается ‘\ufeff’. Простейшим решением этой проблемы является изменение кодировки на ASCII (для этого вы можете скопировать ваш код в блокнот и сохранить его Помните! выберите кодировку ASCII. Надеюсь, это поможет.