Можно ли заставить RTF писать в UTF-8 ?
Записи в формате RTF создаются на сишарпе RichTextBox компонентом. Далее вместе с другими данными (включая бинарные) пишутся на диск.
Дело в том что русские буквы RTF кодирует как байты (т.е. по две 16ричные цифры). Английские же - не кодирует.
Поэтому если открыть такой файл какой либо сторонней программой (напр. Beyond Compare), которая показывает содержимое, пытаясь подобрать кодировку, то английский текст читается без проблем, а русский - нет.
Нельзя ли RichTextBox заставить сохранять русские символы в напр. UTF-8 кодировке?
Сохраняйте сами как угодно. Но вопрос стоит так - можно ли в RTF изменить кодировку русских символов?
уточню.
Вот такой текст
"свернуть развернуть блок
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)
возможно это и решает что английские буквы - буквами остаются, а русские кикиморой кодируются.
Английские буквы выводятся в RFT как есть, потому что они находятся в ASCII. Все остальные символы (не ASCII) кодируются в соответствии с форматом.
Но можно ли этим управлять? (речь идет о RichTextBox)
Так что нет.
Нельзя ли RichTextBox заставить сохранять русские символы в напр. UTF-8 кодировке?
-----
Не пробовал, но...
Там есть два режима - техт и хтмл.
Перевести контрол во второй и попробовать.
Второй вариант - писать самому, т.е. без контрола, нужный РТФ.
Увы, у меня времени по-экспериментировать нет...
Там есть два режима - техт и хтмл.как минимум в ВиндовсФормс нету режима хмл.
Второй вариант - писать самому, т.е. без контрола, нужный РТФ.некоторый вариант я уже сделал. Правда это всего лишь конвентор в свой формат, который с русскими буквами, и обратно в РТФ. Конечно какие либо особые нюансы форматирования РТФ могут потеряться, но это не важно. Важно только текст, шрифт, цвет.
Можно пойти с другой стороны: написать фильтр для BC (емнип это возможно, если нет, можно попробовать WinMerge).
Нет, это невозможно сделать, поскольку по спецификации можно использовать только то, что влазит в 7 бит
Не совсем верно. Это что касается Basic entities. Внутри может быть задан Character set в одной из кодировок или unicode.
Русская вики об этом тоже говорит.
Внутри может быть задан Character set в одной из кодировок или unicode. Русская вики об этом тоже говорит.
И она же говорит, как кодируются эти символы. Читай дальше про escape-последовательности.