1 Востаннє редагувалося dialectstat (28.10.2015 12:41:58)

Тема: Противнющий NEL, (U+0085)

Як видалити в Python NEXT LINE, воно ж, NEL, воно ж U+0085, воно ж <85> ?
Пробував

.replace("\r\n", " ")
.replace("\r", " ")
.replace("\R", " ")
.replace("\u0085", " ")
.replace("\u0085u", " ")

Нічого не допомагає.

2 Востаннє редагувалося koala (28.10.2015 12:49:22)

Re: Противнющий NEL, (U+0085)

s = ' '.join(s.splitlines())

http://stackoverflow.com/questions/2201 … ode-string

3

Re: Противнющий NEL, (U+0085)

>>> 'ghdfhfd\u0085bcfhfh\u0085\u0085'.replace("\u0085", " ")
'ghdfhfd bcfhfh  '

Ніби працює. Що я роблю нетак? Python 3.3

4

Re: Противнющий NEL, (U+0085)

Хоча, якщо у Вас Python 2.*, проблема може бути в тому, що рядкові літерали по дефолту представляють байтові рядки, а не юнікодні. Очевидно, тоді треба попередньо декодувати прочитаний рядок байтів, а заміну робити так:

.replace(u"\u0085", " ")
Подякували: dialectstat, 0xDADA11C7, leofun013

5

Re: Противнющий NEL, (U+0085)

koala написав:
s = ' '.join(s.splitlines())

http://stackoverflow.com/questions/2201 … ode-string

роблю

pr=str(A[j][i])
pr=pr.join(pr.splitlines())

Все залишається на місці, не видаляється.

6

Re: Противнющий NEL, (U+0085)

P.Y. написав:

Хоча, якщо у Вас Python 2.*, проблема може бути в тому, що рядкові літерали по дефолту представляють байтові рядки, а не юнікодні. Очевидно, тоді треба попередньо декодувати прочитаний рядок байтів, а заміну робити так:

.replace(u"\u0085", " ")

В мене 2.7 Python
все в utf-8:

sys.setdefaultencoding('[b]utf-8[/b]')
db=MySQLdb.connect(host="хххх", user="хххх", passwd="хххх", db="хххх", charset='[b]utf8[/b]')
db.set_character_set('[b]utf8[/b]')

Як ще декодувати?

7

Re: Противнющий NEL, (U+0085)

P.Y. написав:

Хоча, якщо у Вас Python 2.*, проблема може бути в тому, що рядкові літерали по дефолту представляють байтові рядки, а не юнікодні. Очевидно, тоді треба попередньо декодувати прочитаний рядок байтів, а заміну робити так:

.replace(u"\u0085", " ")

О, те що треба! Пішло

8 Востаннє редагувалося P.Y. (28.10.2015 15:01:59)

Re: Противнющий NEL, (U+0085)

В пітоні є два типи рядків: байтові й юнікодні.
Рядки байтів можуть містити текст у різних кодуваннях, у т.ч., utf-8. Рядки юнікодних символів зберігають розкодовану послідовність символів у вигляді їхніх юнікодних кодів. Якщо система чи база даних використовує utf-8, це не означає, що рядок, повернутий функцією, буде юнікодним.

Спробуйте визначити тип даних рядка, який треба обробити:

print type(рядок)

Якщо результат цього буде <type 'str'> — це рядок байтів, якщо ж <type 'unicode'> — це юнікодний рядок*.
З юнікодним рядком декодування робити непотрібно — просто робите заміну, як у прикладі вище.
Якщо ж це рядок байтів, треба зробити .decode(), якщо це utf-8, чи decode('кодування'), і вже в ньому робити заміну.

*) Це стосується Python 2.*. У Python 3.* юнікодній рядок — <class 'str'>, байтовий рядок — <class 'bytes'>.

Подякували: dialectstat, leofun012

9

Re: Противнющий NEL, (U+0085)

P.Y. написав:

В пітоні є два типи рядків: байтові й юнікодні.
Рядки байтів можуть містити текст у різних кодуваннях, у т.ч., utf-8. Рядки юнікодних символів зберігають розкодовану послідовність символів у вигляді їхніх юнікодних кодів. Якщо система чи база даних використовує utf-8, це не означає, що рядок, повернутий функцією, буде юнікодним.

Спробуйте визначити тип даних рядка, який треба обробити:

print type(рядок)

Якщо результат цього буде <type 'str'> — це рядок байтів, якщо ж <type 'unicode'> — це юнікодний рядок*.
З юнікодним рядком декодування робити непотрібно — просто робите заміну, як у прикладі вище.
Якщо ж це рядок байтів, треба зробити .decode(), якщо це utf-8, чи decode('кодування'), і вже в ньому робити заміну.

*) Це стосується Python 2.*. У Python 3.* юнікодній рядок — <class 'str'>, байтовий рядок — <class 'bytes'>.

<type 'unicode'>