Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2019, 18:19   #1
SiriusAlpfa
Новичок
Джуниор
 
Регистрация: 17.03.2015
Сообщений: 1
Злость C# и запись русского текста в шаблон .rtf

Здравствуйте, коллеги.
Итак.
Есть БД MySQL (кодировку поставил cp1251_general_cs, при utf8 тоже была проблема).
Есть приложение C# WinForms x86 .3.5
Есть шаблон .rtf (шаблон договора) с текстом, форматированием, таблицами и вставками вида #clientName#.

Что я делаю.
Читаю файл через File.ReadAllText, юзаю Replace и пишу всё назад в другой файл.
Старый текст и форматирование без изменений, новое в виде кракозябр. Пробовал читать/сохранять файл в разных кодировках (utf8,1251,1252,iso,unicode,default ) - кракозябры меняются, но в русские буквы не превращаются.

Пробовал грузить в RichTextBox через LoadFile, править его текст и писать обратно - формат в задницу, таблицы как попало.
Пробовал (что смог найти в гугле) читать/писать через массив байт - один фиг.
Ещё и если шаблон поправить через ворд, с его кодировкой начинает твориться какая-то дичь, поэтому правки можно делать только через WordPad.

Самое забавное, что на данный момент у меня работает такая схема, но работает с оговорками.
Загружаю и пишу в 1251, первая строка шаблона:
{\rtf1\ansi\ansicpg1251\deff0\nouic ompat\deflang1033\deflangfe1049\def tab709

Код:
public static string ToRTF(string value)
        {
            string syms = @"ЎўЈЈ¤Ґ¦§Ё©Є«¬®Ї°±Ііґµ¶•ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя";              
            string rep_1 = @"0123456789abcdef";
            int j = 0;
            int k = 0;
            while (j < value.Length)
            {
                if (syms.IndexOf(value[j]) >= 0)
                {
                    k = syms.IndexOf(value[j]) + 1;
                    value = value.Replace(value[j].ToString(), "\\'" + rep_1[(k / 16) + 10].ToString() + rep_1[k & 15].ToString());
                };
                j++;
            };
            value = value.Replace("\\n", "\\par;");
            return value;
        }
А теперь самое забавное: по такому алгоритму 8/10 строк пишутся правильно, остальные кракозябрами. То есть буквально - через одну. Читаю клиента из БД, FirstName отображается верно, а lastName - кракозябрами.
Я в замешательстве. Что посоветуете?
SiriusAlpfa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись в текстовый файл русского текста KT82 Общие вопросы C/C++ 13 07.02.2016 22:14
[Delphi] запись тега в RTF psy_shit Помощь студентам 0 08.05.2012 13:34
Преобразование текста программы в RTF Kostj@n Общие вопросы Delphi 3 27.12.2011 11:44
Подключение русского текста в С/C++ Ovis Помощь студентам 9 08.04.2011 22:25
Вставка данных из MySQL в RTF шаблон asus_p526 Фриланс 7 25.04.2010 02:04