Проблемы с кодировкой

Тема в разделе ".NET", создана пользователем Young Programmer, 18 ноя 2007.

  1. Young Programmer

    Young Programmer Гость

    Люди добрые. Переустановил Windows, теперь в консоли не отображаются русские буквы:

    Код (Text):
    using System;
    using System.Collections.Generic;
    using System.Text;



    namespace ANSITABLE
    {
    class Program
    {
    static void Main(string[] args)
    {
    int i;
    char ch;

    for (i = 1; i < 255; i++)
    {
    ch = (char)i;
    Console.WriteLine("Symbol {0,7} {1}", i, ch);
    }
    }
    }
    }
    На месте русских букв либо ? либо другие символы.
    Как исправить это можно? Желательно исправить в самой Windows, а не программно. Помогите плизз.
     
  2. Pasha

    Pasha Гость

    Для: Young Programmer
    В Control Panel / Regional and language options, на последней закладке установи русский как язык для неюникодовых программ.
    З.Ы. А в .net char 16-битовый.
     
  3. Young Programmer

    Young Programmer Гость

    Уважаемый Pasha! Русский язык был установлен, но на всякий случай изменил на русский еще раз. Результат тот же. Знак ? или английские буквы вместо русских. Я знаю, что char 16-битовый, но как это относится к моей проблеме? Я некорректно применил этот тип? Если есть ошибка укажите пожалуйста, интересно.
     
  4. Pasha

    Pasha Гость

    Для: Young Programmer
    char 16-битовый, принимает значения от 0 до 65535. Коды русских букв начинаются где-то с 1072. А у вас цикл всего до 255.
     
  5. Young Programmer

    Young Programmer Гость

    Мммм... может я что-то не то понимаю, но передо мною ASCII таблица, в ней русские буквы начинаются с 128 позиции и заканчиваются 175. Английские буквы в этой же таблице отображаются как надо. Проверил с 1072, да, действительно русские буквы. Но все-таки интересует почему не хотят отображаться русские буквы, находящиеся на 128-175 позиции ASCII таблицы... Или я конкретно что-то не понимаю? :)
     
  6. Pasha

    Pasha Гость

    Для: Young Programmer
    ASCII таблица - это коды символов в кодировке ASCII. В ней всего 127 символов.
    Код (Text):
    Encoding encoding = Encoding.ASCII;
    byte [] bytes = new byte[1];

    for (int i = 0; i < 256; i++)
    {
    bytes[0] = (byte)i;
    char ch = encoding.GetChars(bytes)[0];
    Console.Write(ch);
    if (i % 16 == 15)
    {
    Console.WriteLine();
    }
    }
    А то, что ты хочешь вывести - таблица для кодовой страницы 1251, koi8-r или еще какой-то кодировки с русскими символами. Замени Encoding.ASCII на Encoding.GetEncoding(1251), Encoding.GetEncoding("koi8-r") и посмотри на результат.
     
  7. Young Programmer

    Young Programmer Гость

    А, понятно :\ Просто у меня какая-то таблица ASCII символов, там их 255. Меня обманули :)...
    Теперь более менее ясно. Спасибо за разъяснения!
     
  8. Pretorian

    Pretorian Гость

    C# использует unicode символы это 16-бит,
    ASCII 8-бит. Раньше все было в ASCII пока не пришел век unicode. Таблица ASCII может еще пригодится :), невыкидывай ее, многое использует именно ее. Если использовать ASCII то символы свыше 127, могут различатся у национальных кодировок, а в unicode нет различия. Т.е. написал прогу на русском в unicode, ее будут видеть на русском все, а если в ASCII то только те у кого потдерживается русский язык.
     
Загрузка...

Поделиться этой страницей