Write russian text python

nngogol / pdf_russian_reportlab.py

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

#!/usr/bin/env python
#-*- coding: UTF-8 -*-
from reportlab . lib import colors
from reportlab . platypus import Paragraph , SimpleDocTemplate , Table , TableStyle
from reportlab . lib . styles import getSampleStyleSheet
from reportlab . lib . pagesizes import A4
from reportlab . pdfbase import pdfmetrics
from reportlab . pdfbase . ttfonts import TTFont
styles = getSampleStyleSheet () # дефолтовые стили
def StringGuy ( text ):
return f’
def ParagGuy ( text , style = styles [ ‘Normal’ ]):
return Paragraph ( StringGuy ( text ), styles [ ‘Normal’ ])
pdfmetrics . registerFont ( TTFont ( ‘DejaVuSerif’ , ‘DejaVuSerif.ttf’ , ‘UTF-8’ ))
doc = SimpleDocTemplate ( ‘test.pdf’ ,
pagesize = A4 ,
title = ‘Basic thing’ ,
author = ‘Gogol’ )
story = [] # словарь документа
# текст
story . append ( ParagGuy ( ‘Привет мир!’ ))
story . append ( ParagGuy ( ‘Привет мир!’ , styles [ ‘Heading1’ ]))
for i in range ( 5 ):
story . append ( Paragraph ( «Тест простой » , styles [ «Normal» ]))
story . append ( Paragraph ( ‘Тест золотой ‘ , styles [ «Normal» ]))
# таблица
t = Table (
[
[ ‘123’ , ‘english text’ , ‘still english’ ],
[ ‘heeeelo’ , ‘4324’ , ‘5346’ ],
[ ‘231’ , ‘4324’ , ‘5346’ ]
]
)
t . setStyle ( TableStyle ([( ‘ALIGN’ ,( 1 , 1 ),( — 2 , — 2 ), ‘RIGHT’ ),
( ‘INNERGRID’ , ( 0 , 0 ), ( — 1 , — 1 ), 0.25 , colors . black ),
( ‘BOX’ , ( 0 , 0 ), ( — 1 , — 1 ), 0.25 , colors . black ),
]))
story . append ( t )
# таблица русская
t2 = Table (
[
[ ‘123’ , ‘english text’ , ‘still english’ ],
[ ‘heeeelo’ , ParagGuy ( ‘русский’ ), ‘5346’ ],
[ ‘231’ , ‘4324’ , ‘5346’ ]
]
)
t2 . setStyle ( TableStyle ([( ‘ALIGN’ ,( 1 , 1 ),( — 2 , — 2 ), ‘RIGHT’ ),
( ‘INNERGRID’ , ( 0 , 0 ), ( — 1 , — 1 ), 0.25 , colors . black ),
( ‘BOX’ , ( 0 , 0 ), ( — 1 , — 1 ), 0.25 , colors . black ),
]))
story . append ( t2 )
doc . build ( story )
#!/usr/bin/env python #-*- coding: UTF-8 -*- from reportlab.lib import colors from reportlab.platypus import Paragraph, SimpleDocTemplate, Table, TableStyle from reportlab.lib.styles import getSampleStyleSheet from reportlab.lib.pagesizes import A4 from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont styles = getSampleStyleSheet() # дефолтовые стили # the magic is here styles['Normal'].fontName='DejaVuSerif' styles['Heading1'].fontName='DejaVuSerif' pdfmetrics.registerFont(TTFont('DejaVuSerif','DejaVuSerif.ttf', 'UTF-8')) doc = SimpleDocTemplate('test.pdf', pagesize = A4, title='Basic thing', author='Gogol') story = [] # словарь документа # текст story.append(Paragraph('Привет мир!', styles["Normal"])) story.append(Paragraph('Привет мир!', styles['Heading1'])) for i in range(5): story.append(Paragraph("Тест простой", styles["Normal"])) story.append(Paragraph('Тест золотой ',styles["Normal"])) # таблица t = Table( [ ['123', 'english text', 'still english'], ['heeeelo', '4324', '5346'], ['231', '4324', '5346'] ] ) t.setStyle(TableStyle([('ALIGN',(1,1),(-2,-2),'RIGHT'), ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), ('BOX', (0,0), (-1,-1), 0.25, colors.black), ])) story.append(t) # таблица русская t2 = Table( [ ['123', 'english text', 'still english'], ['heeeelo', Paragraph('русский', styles["Normal"]), '5346'], ['231', '4324', '5346'] ] ) t2.setStyle(TableStyle([('ALIGN',(1,1),(-2,-2),'RIGHT'), ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), ('BOX', (0,0), (-1,-1), 0.25, colors.black), ])) story.append(t2) doc.build(story)

You can’t perform that action at this time.

Источник

Как записать текст на русском в файл UTF-8?

1. Почему файлы ‘str_ru_text_1.txt’, ‘str_ru_text_2.txt’ в кодировке Windows 1251, а файлы ‘str_en_text_1.txt’, ‘str_en_text_2.txt’ — в UTF-8?

2. Есть ли способ записать utf-8 без str.encode(‘utf-8’)?

3. Где описаны правила записи строк в файл? Где и что почитать по этой проблеме?

with open('str_ru_text_1.txt', 'rb') as f: print(f.read().decode('utf-8')) with open('str_en_text_1.txt', 'rb') as f: print(f.read().decode('utf-8'))

Оценить 2 комментария

>а файлы ‘str_en_text_1.txt’, ‘str_en_text_2.txt’ — в UTF-8?
Как ты определил по файлу с ascii символами в какой они кодировке?

lololololo: см. ветку комментариев к первому комментарию (началось с прикладного софта, закончилось подбором кодировки через decode): https://toster.ru/answer?answer_id=344879#comments_list

Товарищи, это писец какой-то. Хотели как лучше, а получилось еще более через жопу.

mode is an optional string that specifies the mode in which the file is opened. <. >In text mode, if encoding is not specified the encoding used is platform dependent: locale.getpreferredencoding(False) is called to get the current locale encoding. (For reading and writing raw bytes use binary mode and leave encoding unspecified.)

1. Если не указан режим ‘b’, то по умолчанию файл считается текстовым. В двоичный файл можно писать только байты, в текстовый — только юникод.
(В текстовом режиме файл читается только до EOF (‘\x1a’). Как совместить чтение до конца файла и запись юникода в файл? А никак.)
2. Если кодировка не указана, по умолчанию берется locale.getpreferredencoding(False), т.е. результат выполнения будет зависеть от настроек оси! (для винды — от текущей локали). Нахера. От одних граблей избавились, другие приобрели.

В общем, всегда явно указывай явно кодировку файла.

with open('str_ru_text_1.txt', 'w', encoding='utf-8') as f:

Из вопроса:
>> Python 3.4, Windows 8.1
С codecs не встречался, а с двойкой не работаю. Чем codecs.open от open отличается (в Python 3)?

Если только для двойки, то не стоит тратить время на объяснение, спасибо. А с параметром encoding еще тогда разобрались, но без источников. Спасибо за ссылку.

Источник

Как заставить выводить русский текст Python?

Что нужно сделать что-бы в консоль выводилась кириллица?

Для англ. алфавита — работает, а для русского — нет.

__author__ = 'getlucky' # -*- coding: utf-8 -*- def cesarMethod(message): output = [] alphabet = 'abcdefghijklmnopqrstuvwxyz'#'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' steps = int(raw_input('Введите Ваш ключ: ')) for i in message: if i == ' ': output.append(' ') else: pos = alphabet.index(i) + steps if pos >= 25: pos -= 26 output.append(alphabet[pos].decode('utf8')) print 'Зашифрованное сообщение: ', ''.join(output) message = raw_input('Введите Ваше сообщение: ').lower() cesarMethod(message)

Оценить 2 комментария

winordie

winordie

# -*- coding: utf-8 -*- message = 'ывпавыапавыпвпав' for i in message: print(i)
message = u'ывпавыапавыпвпав' for i in message: print(i)

разница всего в одном символе

# -*- coding: utf-8 -*- def cesarMethod(message): output = [] # alphabet = 'abcdefghijklmnopqrstuvwxyz'#'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' alphabet = u'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' # steps = int(raw_input('Введите Ваш ключ: ')) steps = 2 for i in message.decode('utf8'): if i == ' ': output.append(' ') else: pos = alphabet.index(i) + steps if pos >= 25: pos -= 26 output.append(alphabet[pos]) print 'Зашифрованное сообщение: ', ''.join(output) # message = raw_input('Введите Ваше сообщение: ').lower() message = 'специальнодлятостера' cesarMethod(message)

Источник

Читайте также:  Css input textarea placeholder
Оцените статью