|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
Есть у меня c# функция, которая вынимает из RTF чистый текст. Есть такой текст в RTF The ü, ö, ç characters are displayed as ь, ц, з, "ш", "щ", "ы" Вот его внутренности {\rtf1\ansi\ansicpg1251\deff0\deflang1049{\fonttbl{\f0\fnil\fcharset0 Arial;}} {\colortbl ;\red0\green0\blue0;} \viewkind4\uc1\pard\cf1\fs24\par The \ldblquote\'fc\rdblquote , \ldblquote\'f6\rdblquote , \ldblquote\'e7\rdblquote characters are displayed as \ldblquoteᄀ?\rdblquote , \ldblquote႔?\rdblquote , \ldblquoteၹ?\rdblquote , "႖?", "႗?", "႙?"\par } Вопрос: Меняю пальцами ansicpg1251 на ansicpg1252 или ansicpg1253 но контрол в с++ показывает корректно текст, т.е. турецкие, русские буквы - все ок. Как понять это параметр ansicpg1251 ? он игнорируется полностью? Но если я регаирую на этот параметр, то естесвтенно вместо турецких символов будут русские или греческие. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2014, 14:33 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
Winnipuh, ..так символы же в Юникоде, если не ошибаюсь .. им пофиг ANSI ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2014, 14:53 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
carrotikWinnipuh, ..так символы же в Юникоде, если не ошибаюсь .. им пофиг ANSI Если я правильно понимаю такие "႖?" да, в юникоде, а такие "\'f6" ? Собственно в них и проблема в данном примере, т.е. как их интепретировать ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2014, 14:57 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
Winnipuh, русские - в юникоде - им похер установка codepage а вот с турецкими - сложнее. на показ влияет \fcharset чтоб избавиться от проблем - \ansicpg1251 указывай с \fcharset204 а чтоб наверняка - всё что не ASCII - пиши в юникоде ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2014, 14:59 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
ИзопропилWinnipuh, русские - в юникоде - им похер установка codepage а вот с турецкими - сложнее. на показ влияет \fcharset чтоб избавиться от проблем - \ansicpg1251 указывай с \fcharset204 а чтоб наверняка - всё что не ASCII - пиши в юникоде так проблема в том, что ртф пишется ms контролом в c++ приложении. Я туда не влезу. А у меня c# функция, которая читает ртф и выдает на выходе чистый текст. Вот она и срабатывает неправильно, т.е. реагирует по-честному на параметр ansicpg1251 или ansicpg1254 и в зависимости от него показывает то русские, то греческие символы и т.д.. а контрол игнорирует его и всегда показывает турецкие символы. Вопрос в том, когда этот параметр мне можно игнорировать в c#? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2014, 15:14 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
Winnipuhа контрол игнорирует его и всегда показывает турецкие символы. потому что \fcharset0 на выходе "ms контролом в c++ приложении" - кривой rtf, что здесь удивительного ? поправь \fcharset ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2014, 16:26 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
ИзопропилWinnipuhа контрол игнорирует его и всегда показывает турецкие символы. потому что \fcharset0 на выходе "ms контролом в c++ приложении" - кривой rtf, что здесь удивительного ? поправь \fcharset так не я его пишу, как его исправлю? это пишет майкрософтовский ричедит контрол, используемый в с++, но он то сам правильно показывает символы. Вот я и пытаюсь понять, как мне разбирать такой ртф. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2014, 16:29 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
Winnipuh, ...да перепишите в своей функции словарь (под набор 1251) просто вручную ... туповато, конечно, но у меня так вб-скрипт работает, который ртф-ки парсит ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2014, 16:29 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
Winnipuh, ...или просто replace сделайте fcharset0 на fcharset204, прежде чем на вход функции подавать ... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2014, 16:33 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
carrotikWinnipuh, ...или просто replace сделайте fcharset0 на fcharset204, прежде чем на вход функции подавать ... сделал, не помогло. Функция кстати не отображает, а разбирает ртф и вынимает текст. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2014, 17:09 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
WinnipuhcarrotikWinnipuh, ...или просто replace сделайте fcharset0 на fcharset204, прежде чем на вход функции подавать ... сделал, не помогло. Функция кстати не отображает, а разбирает ртф и вынимает текст. ...ну, значит, руками пишите массив и переподставляйте ... вот так у меня в скрипте работает, на VBS ... понятно, что велосипед наколенный, но работает Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2014, 17:15 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
Исходя из того, что написано здесь я вроде бы поступаю правильно http://habrahabr.ru/post/70119/ Итак, в rtf'е есть возможность использования второй половины таблицы ASCII, та что от 128 и выше. С учётом текущей кодировки (выше управляющее слово \ansicpg), конечно же. Для этого в RTF была введена последовательность вида \'hh, где hh — это двоичный hex-код символа из таблицы ASCII. т.е. я использую эту кодовую страницу и получаю вместо турецких - русские символы. А ms контрол показывает турецкие, что и хотелось бы мне поулчить. Какая логика у них? в этом вопрос... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2014, 17:45 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
WinnipuhИсходя из того, что написано здесь я вроде бы поступаю правильно http://habrahabr.ru/post/70119/ Итак, в rtf'е есть возможность использования второй половины таблицы ASCII, та что от 128 и выше. С учётом текущей кодировки (выше управляющее слово \ansicpg), конечно же. Для этого в RTF была введена последовательность вида \'hh, где hh — это двоичный hex-код символа из таблицы ASCII. т.е. я использую эту кодовую страницу и получаю вместо турецких - русские символы. А ms контрол показывает турецкие, что и хотелось бы мне поулчить. Какая логика у них? в этом вопрос... ... конвертируйте в Юникод, у вас же на компьютере стоит codepage 1251 по умолчанию? .. вот он и показывает .. На турецком компе все было бы нормально ... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2014, 17:59 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
WinnipuhКакая логика у них? в этом вопрос никакой, просто ошибки, ибо проблемы негров(кодировок отличных от Latin-1) шерифа не волнуют ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2014, 18:05 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
Winnipuh, а ты не пробовал использовать стандартный RichTextBox для чтения текста? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2014, 23:12 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
bazileWinnipuh, а ты не пробовал использовать стандартный RichTextBox для чтения текста? пробовал, я бы и рад использовать и забыть, но в этом случае не получается. Эта функция у меня в SQLCLR сидит, в базе. И из полей , содеращих ртф вынимает чистый текст для индексирования ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2014, 12:28 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
WinnipuhИ из полей , содеращих ртф вынимает чистый текст для индексирования в этом случае - всё равно как показывается, анализируй \ansicpg ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2014, 12:48 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
WinnipuhbazileWinnipuh, а ты не пробовал использовать стандартный RichTextBox для чтения текста? пробовал, я бы и рад использовать и забыть, но в этом случае не получается. Эта функция у меня в SQLCLR сидит, в базе. И из полей , содеращих ртф вынимает чистый текст для индексирования ...так тем более, сделайте перед insert-ом replace HEX на Юникод, и пусть так и лежит ... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2014, 13:04 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
Winnipuh, если RichTextBox не получится использовать, то может взять готовую библиотеку ( раз , два )? У них открытые исходники так что можно легко встроить их прямо в в твое приложение. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2014, 16:43 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
bazileWinnipuh, если RichTextBox не получится использовать, то может взять готовую библиотеку ( раз , два )? У них открытые исходники так что можно легко встроить их прямо в в твое приложение. недоделано там для таких случаев, так же для RTL текстов и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2014, 19:23 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
Winnipuhнедоделано там для таких случаев, так же для RTL текстов и т.д. ну тогда спецификации rtf в руки и установить адекватную цену за работу ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2014, 22:16 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
bazileWinnipuh, если RichTextBox не получится использовать, то может взять готовую библиотеку ( раз , два )? У них открытые исходники так что можно легко встроить их прямо в в твое приложение. проверил и второй парсер, он тоже кривой авторRTFDocument: Info Creatim=2014-03-20 09:43:35 Revtim=2014-03-20 09:43:35 Printim=2014-03-20 09:43:35 Buptim=2014-03-20 09:43:35 ColorTable(1) 0:0 0 0 FontTable(1) 0:Arial Charset:0 ----------------------- Paragraph Text:The ь, ц, з characters are displayed/saved as ?, ?, ?, "?", "?", "?" Paragraph ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 12:44 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
ИзопропилWinnipuhнедоделано там для таких случаев, так же для RTL текстов и т.д. ну тогда спецификации rtf в руки и установить адекватную цену за работу там не описано то, о чем я спрашиваю. Т.е. в каких случаях игнорируется ansicpg=nnnn? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 12:45 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
Winnipuh, .. все-таки я не пойму вашей задачи .. если у вас в RTF допускаются символы юникода, то что мешает вам сделать замену, напр., если ansicpg1252, то 'fc -> u0252? 'f6 -> u0246? 'e7 -> u0231? .. и тогда это и в Африке будут турецкие буквы .. Если кодовая страница будет греческая - то соответствующие коды Юникода .... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 13:38 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
carrotikWinnipuh, .. все-таки я не пойму вашей задачи .. если у вас в RTF допускаются символы юникода, то что мешает вам сделать замену, напр., если ansicpg1252, то 'fc -> u0252? 'f6 -> u0246? 'e7 -> u0231? .. и тогда это и в Африке будут турецкие буквы .. Если кодовая страница будет греческая - то соответствующие коды Юникода .... возможно я несколько сумбурно описал. Задача такая, чего хотелось бы: в ртф может быть практически любая кодовая страница ansicpg1251 ansicpg1252 ansicpg1254 ... но при этом всегда 'fc - это всегда должна быть турецкая буква Так делает richtext контрол от microsoft Но не так ведет себя мой код, поскольку я как описано в документации по формату ртф реагирую на кодовую страницу. Видимо в каких -то случаях не надо реагировать на нее, вот это я и пытаюсь понять. Есть такая версия Если указана некая ansicpgXXXX и указан fcharset0 и попадается такой код 'hh и если hh - это вторая часть таблицы ascii (128-255), то тогда игнорируется ansicpgXXXX и берется код из таблицы. В этом случае в примере турецкая буква - будет всегда турецкой, она в таблице. Корректно ли то, что я сформулировал выше для всех случаев? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 13:54 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
Winnipuh, ...на этот теоретический вопрос ответить не могу, только знаю, что стандарт ANSI разрабатывался на базе именно 1252 - соответственно и турки попали в набор по умолчанию ... Но я бы переконвертил все в юникод и забыл .... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 14:08 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
carrotikWinnipuh, ...на этот теоретический вопрос ответить не могу, только знаю, что стандарт ANSI разрабатывался на базе именно 1252 - соответственно и турки попали в набор по умолчанию ... Но я бы переконвертил все в юникод и забыл .... видимо я торможу, но для того чтобы конвертировать, нужно знать как. Т.е тот же вопрос, который я написал в предыдущем сообщении. Если я буду реагировать на ansipgXXXX параметр и преобразовывать 'fc в uNNNN в соответствии с этим параметром, то это будет неправильно в данном примере. и этот код uNNNN будет разным в зависимости от ansipgXXXX. А он должен быть одним и тем же. Где я не прав? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 14:35 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
WinnipuhcarrotikWinnipuh, ...на этот теоретический вопрос ответить не могу, только знаю, что стандарт ANSI разрабатывался на базе именно 1252 - соответственно и турки попали в набор по умолчанию ... Но я бы переконвертил все в юникод и забыл .... видимо я торможу, но для того чтобы конвертировать, нужно знать как. Т.е тот же вопрос, который я написал в предыдущем сообщении. Если я буду реагировать на ansipgXXXX параметр и преобразовывать 'fc в uNNNN в соответствии с этим параметром, то это будет неправильно в данном примере. и этот код uNNNN будет разным в зависимости от ansipgXXXX. А он должен быть одним и тем же. Где я не прав? ... тогда не реагируйте, а просто переконвертите ANSI1252 в юникод ... А в чем тогда смысл генерирующего кода, который указывает кодовую страницу? .. Зачем это предусмотрено? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 14:38 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
carrotikWinnipuhпропущено... видимо я торможу, но для того чтобы конвертировать, нужно знать как. Т.е тот же вопрос, который я написал в предыдущем сообщении. Если я буду реагировать на ansipgXXXX параметр и преобразовывать 'fc в uNNNN в соответствии с этим параметром, то это будет неправильно в данном примере. и этот код uNNNN будет разным в зависимости от ansipgXXXX. А он должен быть одним и тем же. Где я не прав? ... тогда не реагируйте, а просто переконвертите ANSI1252 в юникод ... А в чем тогда смысл генерирующего кода, который указывает кодовую страницу? .. Зачем это предусмотрено? 1. Юзер в с++ приложении с майкрософтовским rich text контролом пишет тексты, он изатем пишутся в базу в виде содержимого ртф, 2. при этом отдельно складывается чистый текст, вытаскиваемый из ртф поля, для индексации и т.д. в п.1. я не могу влезть, там работает не мой контрол в п.2. могу, это моя шарповая SQLCLR функция. Потому и пытаюсь исправить поведение своей функции, чтобы она правильно вытаскивала текст. Можете представить скажем 5 юзеров, каждый из которых последовательно меняет содержимое одного и того же ртф в базе через с++ приложение со стандартным рич текст контролом от MS, но у каждого разные региональные сеттинги, и каждый будет перезаписывать ртф со своим параметром ansipgXXXX, но при этом все будут видеть один и тот же текст. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 14:52 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
Winnipuh, ...но вы изначально знаете язык каждого конкретного документа? ... т.е. я понимаю, напр. на Кипре стоит комп с греческой виндой, но документ пишется по-турецки (бывает) ... Но если вы знаете язык, то и сможете выбирать кодовую страницу, не обращая внимание на то, что там прописал с++ контрол ... Ну, так, наверное ... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 15:10 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
[quot carrotik]Winnipuh, ...но вы изначально знаете язык каждого конкретного документа? ... т.е. я понимаю, напр. на Кипре стоит комп с греческой виндой, но документ пишется по-турецки (бывает) ... Но если вы знаете язык, то и сможете нет, не знаю, и предположить не могу. Например, турок рабоатет на виндоуз с английским, но текст пишет с турецкими словами. И даже еще веселее: английский текст пишется с арабскими (RTL) цитатами и т.д.. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 15:16 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
WinnipuhТ.е. в каких случаях игнорируется ansicpg=nnnn? в тех случаях, когда rtf - кривой, и ansicpg не согласуется с fcharset ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 20:41 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
ИзопропилWinnipuhТ.е. в каких случаях игнорируется ansicpg=nnnn? в тех случаях, когда rtf - кривой, и ansicpg не согласуется с fcharset спасибо. Что означает fcharset0? Игнорировать ansicpg=nnnn ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 21:34 |
|
c# и RTF вопрос
|
|||
---|---|---|---|
#18+
WinnipuhЧто означает fcharset0? Игнорировать ansicpg=nnnn ? есть основания полагать, что fcharset приоритетнее ansicpg табличка здесь - http://msdn.microsoft.com/en-us/library/cc194829.aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 22:05 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1403122]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 411ms |
total: | 568ms |
0 / 0 |