Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 14.01.2019, 19:19   #1
SiriusAlpfa
Новичок
 
Регистрация: 17.03.2015
Сообщений: 1
Репутация: 10
Злость 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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись в текстовый файл русского текста KT82 Общие вопросы C/C++ 13 07.02.2016 23: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


18:57.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru