Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

unicode в Кириллица (DOS).

42K
01 мая 2010 года
Roin
17 / / 22.04.2009
День добрый товарищи.
Столкнулся с проблемой кодирования строки в Кириллицу (DOS) из юникода.
Имеется форма, в ней текстБокс, по нажатию строка из текстБокса должна записаться в файл в кодировке ДОС(кирилица).
Прочитал сдесь http://msdn.microsoft.com/ru-ru/library/system.text.encoding.aspx , как по примеру попытался выполнить:
 
Код:
Encoding dos = Encoding.GetEncoding(866);
            Encoding unicode = Encoding.Unicode;
            byte[] unicodeBytes = unicode.GetBytes(textBox2.Text);
            byte[] dosBytes = Encoding.Convert(unicode, dos, unicodeBytes);
            char[] dosChars = new char[dos.GetCharCount(dosBytes, 0, dosBytes.Length)];
            dos.GetChars(dosBytes, 0, dosBytes.Length, dosChars, 0);
            string dosString = new string(dosChars);
            sw1.Write(dosString);

Но к сожалению в файл пишется строка опять же в юникоде... :(
Помогите советом пожалуйста.
307
01 мая 2010 года
Artem_3A
863 / / 11.04.2008
как ты записываешь в файл? к примеру у класса TextWriter есть такое замечательное свойство как Encoding. предположу, что оно у тебя установлено в юникод.
42K
01 мая 2010 года
Roin
17 / / 22.04.2009
Вот так записываю в файл
Код:
StreamWriter sw1 = null;
            sw1 = new StreamWriter("INSEARCH.TXT", false);
            Encoding dos = Encoding.GetEncoding(855);
            Encoding unicode = Encoding.Unicode;
            byte[] unicodeBytes = unicode.GetBytes(textBox2.Text);
            byte[] dosBytes = Encoding.Convert(unicode, dos, unicodeBytes);
            char[] dosChars = new char[dos.GetCharCount(dosBytes, 0, dosBytes.Length)];
            dos.GetChars(dosBytes, 0, dosBytes.Length, dosChars, 0);
            string dosString = new string(dosChars);
            sw1.Write(dosString);
            //sw1.Write(textBox2.Text);
            sw1.Close();
307
01 мая 2010 года
Artem_3A
863 / / 11.04.2008
 
Код:
...
   [color=red]sw1.Encoding = dos;[/color]
   sw1.Write(dosString);
...


и предположу, что можно обойтись даже так:

 
Код:
StreamWriter sw1 = new StreamWriter("INSEARCH.TXT", false);
    sw1.Encoding = Encoding.GetEncoding(855);
    sw1.Write(textBox2.Text);
    sw1.Close();
42K
01 мая 2010 года
Roin
17 / / 22.04.2009
Error 1 Property or indexer 'System.IO.TextWriter.Encoding' cannot be assigned to -- it is read only

это ругнулось на [COLOR="Red"]sw1.Encoding = dos;[/COLOR]
тоже самое и на вариант с
 
Код:
StreamWriter sw1 = null;
             sw1 = new StreamWriter("INSEARCH.TXT", false);
             sw1.Encoding = Encoding.GetEncoding(866);
             sw1.Write(textBox2.Text);
             sw1.Close();
307
01 мая 2010 года
Artem_3A
863 / / 11.04.2008
упс, запамятовал, пробуй так:

 
Код:
StreamWriter sw1 = new StreamWriter("INSEARCH.TXT", Encoding.GetEncoding(866));
    sw1.Write(textBox2.Text);
    sw1.Close();
42K
01 мая 2010 года
Roin
17 / / 22.04.2009
Цитата: Artem_3A
упс, запамятовал, пробуй так:

 
Код:
StreamWriter sw1 = new StreamWriter("INSEARCH.TXT", Encoding.GetEncoding(866));
    sw1.Write(textBox2.Text);
    sw1.Close();



Error 1 The best overloaded method match for 'System.IO.StreamWriter.StreamWriter(string, bool)' has some invalid arguments
Error 2 Argument '2': cannot convert from 'System.Text.Encoding' to 'bool'

:(

307
01 мая 2010 года
Artem_3A
863 / / 11.04.2008
еще раз упс. чего то я совсем сегодня не в форме.

[QUOTE=MSDN]
Список перегрузки
StreamWriter(Stream) Инициализирует новый экземпляр StreamWriter для указанного потока, используя кодировку UTF-8 и размер буфера по умолчанию.
StreamWriter(String) Инициализирует новый экземпляр класса StreamWriter для указанного файла по заданному пути, используя кодировку и размер буфера по умолчанию.
StreamWriter(Stream, Encoding) Инициализирует новый экземпляр класса StreamWriter для указанного потока, используя заданную кодировку и размер буфера по умолчанию.
StreamWriter(String, Boolean) Инициализирует новый экземпляр класса StreamWriter для указанного файла по заданному пути, используя кодировку и размер буфера по умолчанию. Если файл существует, он может быть либо перезаписан, либо в него могут быть добавлены данные. Если файл не существует, конструктор создает новый файл.
StreamWriter(Stream, Encoding, Int32) Инициализирует новый экземпляр класса StreamWriter для указанного потока, используя заданную кодировку и размер буфера.
StreamWriter(String, Boolean, Encoding) Инициализирует новый экземпляр класса StreamWriter для указанного файла по заданному пути, используя заданную кодировку и размер буфера по умолчанию. Если файл существует, он может быть либо перезаписан, либо в него могут быть добавлены данные. Если файл не существует, конструктор создает новый файл.
StreamWriter(String, Boolean, Encoding, Int32) Инициализирует новый экземпляр класса StreamWriter для указанного файла по заданному пути, используя заданную кодировку и размер буфера. Если файл существует, он может быть либо перезаписан, либо в него могут быть добавлены данные. Если файл не существует, конструктор создает новый файл.
[/QUOTE]

попробуй так

 
Код:
StreamWriter sw1 = new StreamWriter(new FileStream("INSEARCH.TXT", FileMode.Open), Encoding.GetEncoding(866));
    sw1.Write(textBox2.Text);
    sw1.Close();
42K
01 мая 2010 года
Roin
17 / / 22.04.2009
Error 1 No overload for method 'FileStream' takes '1' arguments
:(
307
01 мая 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: Roin
Error 1 No overload for method 'FileStream' takes '1' arguments
:(



в коде выше два аргумента, ты или скопировал до того как я поправил, или не верно скопировал.

42K
01 мая 2010 года
Roin
17 / / 22.04.2009
О. Получилось. Спасибо огромное :)
Подскажи, пожалуйста, как прочитать строку в такой кодировке из этого файла ? Т.е теперь в файле строки в кодировке 866. А например если вывести такое на лейбл то будет не соответствие. Т.е как обратно декодирвоать.
307
01 мая 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: Roin
О. Получилось. Спасибо огромное :)
Подскажи, пожалуйста, как прочитать строку в такой кодировке из этого файла ? Т.е теперь в файле строки в кодировке 866. А например если вывести такое на лейбл то будет не соответствие. Т.е как обратно декодирвоать.



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

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог