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);
unicode в Кириллица (DOS).
Столкнулся с проблемой кодирования строки в Кириллицу (DOS) из юникода.
Имеется форма, в ней текстБокс, по нажатию строка из текстБокса должна записаться в файл в кодировке ДОС(кирилица).
Прочитал сдесь http://msdn.microsoft.com/ru-ru/library/system.text.encoding.aspx , как по примеру попытался выполнить:
Код:
Но к сожалению в файл пишется строка опять же в юникоде... :(
Помогите советом пожалуйста.
как ты записываешь в файл? к примеру у класса TextWriter есть такое замечательное свойство как Encoding. предположу, что оно у тебя установлено в юникод.
Код:
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();
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();
Код:
...
[color=red]sw1.Encoding = dos;[/color]
sw1.Write(dosString);
...
[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();
sw1.Encoding = Encoding.GetEncoding(855);
sw1.Write(textBox2.Text);
sw1.Close();
это ругнулось на [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();
sw1 = new StreamWriter("INSEARCH.TXT", false);
sw1.Encoding = Encoding.GetEncoding(866);
sw1.Write(textBox2.Text);
sw1.Close();
Код:
StreamWriter sw1 = new StreamWriter("INSEARCH.TXT", Encoding.GetEncoding(866));
sw1.Write(textBox2.Text);
sw1.Close();
sw1.Write(textBox2.Text);
sw1.Close();
Цитата: Artem_3A
упс, запамятовал, пробуй так:
Код:
StreamWriter sw1 = new StreamWriter("INSEARCH.TXT", Encoding.GetEncoding(866));
sw1.Write(textBox2.Text);
sw1.Close();
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'
:(
[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();
sw1.Write(textBox2.Text);
sw1.Close();
:(
Цитата: Roin
Error 1 No overload for method 'FileStream' takes '1' arguments
:(
:(
в коде выше два аргумента, ты или скопировал до того как я поправил, или не верно скопировал.
Подскажи, пожалуйста, как прочитать строку в такой кодировке из этого файла ? Т.е теперь в файле строки в кодировке 866. А например если вывести такое на лейбл то будет не соответствие. Т.е как обратно декодирвоать.
Цитата: Roin
О. Получилось. Спасибо огромное :)
Подскажи, пожалуйста, как прочитать строку в такой кодировке из этого файла ? Т.е теперь в файле строки в кодировке 866. А например если вывести такое на лейбл то будет не соответствие. Т.е как обратно декодирвоать.
Подскажи, пожалуйста, как прочитать строку в такой кодировке из этого файла ? Т.е теперь в файле строки в кодировке 866. А например если вывести такое на лейбл то будет не соответствие. Т.е как обратно декодирвоать.
читаешь как массив байтов, а потом как у тебя было в примере из мздн, конвертишь это дело в юникодовскую строку.