Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Можно ли заставить RTF писать в UTF-8 ?

322  
anly коренной житель26.06.18 23:32
anly
26.06.18 23:32 


Записи в формате RTF создаются на сишарпе RichTextBox компонентом. Далее вместе с другими данными (включая бинарные) пишутся на диск.

Дело в том что русские буквы RTF кодирует как байты (т.е. по две 16ричные цифры). Английские же - не кодирует.

Поэтому если открыть такой файл какой либо сторонней программой (напр. Beyond Compare), которая показывает содержимое, пытаясь подобрать кодировку, то английский текст читается без проблем, а русский - нет.


Нельзя ли RichTextBox заставить сохранять русские символы в напр. UTF-8 кодировке?

Проклят нарушающий межи ближнего своего (Втор.27:17)
#1 
AlexNek патриот27.06.18 01:31
AlexNek
NEW 27.06.18 01:31 
в ответ anly 26.06.18 23:32

Сохраняйте сами как угодно. Но вопрос стоит так - можно ли в RTF изменить кодировку русских символов?

#2 
anly коренной житель27.06.18 07:46
anly
NEW 27.06.18 07:46 
в ответ AlexNek 27.06.18 01:31

уточню.

Вот такой текст


"свернуть развернуть блок

ctrl+M+L"


внутри RTF будет таким


"\u1089?\u1074?\u1077?\u1088?\u1085?\u1091?\u1090?\u1100? \u1088?\u1072?\u1079?\u1074?\u1077?\u1088?\u1085?\u1091?\u1090?\u1100? \u1073?\u1083?\u1086?\u1082?\par

ctrl+M+L"


Именно эту белиберду (видимо цифры символа в Юникодовской кодировке) я вижу если смотрю в Beyond Compare, чтоб версии сравнить.

А я там хочу видеть нормальный русский текст. И это задача.

.........

Файл это не RTF документ (который Beyond Compare может нормально показать), а смесь чего угодно (включая бинарные данные) вместе с RTF (поэтому Beyond Compare не может преобразовать эти \uXXXX в русский символ).

.......

вначале RTF текста стоит

"{\rtf1\ansi\ansicpg1252\deff0\deflang1031"

возможно это и решает что английские буквы - буквами остаются, а русские кикиморой кодируются.

Но можно ли этим управлять? (речь идет о RichTextBox)


Проклят нарушающий межи ближнего своего (Втор.27:17)
#3 
NightWatch коренной житель27.06.18 11:33
NightWatch
NEW 27.06.18 11:33 
в ответ anly 27.06.18 07:46, Последний раз изменено 27.06.18 11:34 (NightWatch)
возможно это и решает что английские буквы - буквами остаются, а русские кикиморой кодируются.

Английские буквы выводятся в RFT как есть, потому что они находятся в ASCII. Все остальные символы (не ASCII) кодируются в соответствии с форматом.

Но можно ли этим управлять? (речь идет о RichTextBox)

Так что нет.

#4 
Murr патриот27.06.18 15:50
Murr
NEW 27.06.18 15:50 
в ответ anly 26.06.18 23:32

Нельзя ли RichTextBox заставить сохранять русские символы в напр. UTF-8 кодировке?

-----

Не пробовал, но...

Там есть два режима - техт и хтмл.

Перевести контрол во второй и попробовать.


Второй вариант - писать самому, т.е. без контрола, нужный РТФ.


Увы, у меня времени по-экспериментировать нет... хммм

#5 
anly коренной житель27.06.18 17:15
anly
NEW 27.06.18 17:15 
в ответ Murr 27.06.18 15:50
Там есть два режима - техт и хтмл.
как минимум в ВиндовсФормс нету режима хмл.
Второй вариант - писать самому, т.е. без контрола, нужный РТФ.
некоторый вариант я уже сделал. Правда это всего лишь конвентор в свой формат, который с русскими буквами, и обратно в РТФ. Конечно какие либо особые нюансы форматирования РТФ могут потеряться, но это не важно. Важно только текст, шрифт, цвет.
Проклят нарушающий межи ближнего своего (Втор.27:17)
#6 
Murr патриот27.06.18 18:37
Murr
NEW 27.06.18 18:37 
в ответ anly 27.06.18 17:15

Возможно этот более полный:

https://documentation.devexpress.com/WindowsForms/4946/Con...

#7 
Wanderer_ посетитель27.06.18 19:15
NEW 27.06.18 19:15 
в ответ anly 27.06.18 07:46

Попробуйте BOM в начале файла вставить, может Beyond Compare это поможет.


#8 
Simple Nothing is f*cked27.06.18 23:06
Simple
NEW 27.06.18 23:06 
в ответ anly 27.06.18 07:46

Можно пойти с другой стороны: написать фильтр для BC (емнип это возможно, если нет, можно попробовать WinMerge).

#9 
AlexOtt местный житель30.06.18 20:22
AlexOtt
NEW 30.06.18 20:22 
в ответ anly 26.06.18 23:32

Нет, это невозможно сделать, поскольку по спецификации можно использовать только то, что влазит в 7 бит: "A standard RTF file can consist of only 7-bit ASCII characters"

#10 
Wanderer_ завсегдатай01.07.18 12:57
NEW 01.07.18 12:57 
в ответ AlexOtt 30.06.18 20:22
Нет, это невозможно сделать, поскольку по спецификации можно использовать только то, что влазит в 7 бит


Не совсем верно. Это что касается Basic entities. Внутри может быть задан Character set в одной из кодировок или unicode.

Русская вики об этом тоже говорит.



#11 
Murr патриот01.07.18 16:24
Murr
NEW 01.07.18 16:24 
в ответ AlexOtt 30.06.18 20:22

"A standard RTF file can consist of only 7-bit ASCII characters"

-------

Т.е. что в документе не должны встречатся символы отличные от 7-ми битной кодировки.

Как их интерпретировать данное положение не определяет.

#12 
NightWatch коренной житель01.07.18 20:11
NightWatch
NEW 01.07.18 20:11 
в ответ Wanderer_ 01.07.18 12:57
Внутри может быть задан Character set в одной из кодировок или unicode. Русская вики об этом тоже говорит.

И она же говорит, как кодируются эти символы. Читай дальше про escape-последовательности.

#13