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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2014, 22:52   #1
D][mon
Форумчанин
 
Регистрация: 05.01.2010
Сообщений: 150
По умолчанию Преобразование из 1252

Доброго времени суток.
имею string c содержимым "Ýòî îáû÷íàÿ ñòðîêà"
нужно получить это в читаемом виде
Код:
            var str1 = "Ýòî îáû÷íàÿ ñòðîêà";
            var w1252 = Encoding.GetEncoding(1252);
            var def = Encoding.Default;
            var bs1 = str1.ToArray().Select(Convert.ToByte).ToArray();
            var bs2 = (Encoding.Convert(w1252, def, bs1));
            var str2 = def.GetString(bs2);
увы, на выходе получаю "Ýòî îáû÷íàÿ ñòðîêà".

P.S. на самом деле строка содержит символы типа "кракозябры", но тут она отображается так.

Последний раз редактировалось D][mon; 01.08.2014 в 00:19.
D][mon вне форума Ответить с цитированием
Старый 31.07.2014, 23:08   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это если не ошибаюсь вообще внутренняя кодировка редакторов некоторых. По-моему для нее нет средств перевода, пока сам не напишешь.
Что-то типа:
Код:
const s='Ýòî îáû÷íàÿ ñòðîêà';
  var i:integer; s2:string;
begin
 with TStringList.Create do begin
   Text:=StringReplace(
     StringReplace(s,';',#13#10,[rfReplaceAll])
     ,'&#','$',[rfReplaceAll]
   );
   for i:=0 to Count-1 do begin
    s2:=s2+char(StrToInt(Strings[i]));
   end;
   free;
 end;
 Caption:=s2;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.08.2014, 00:58   #3
D][mon
Форумчанин
 
Регистрация: 05.01.2010
Сообщений: 150
По умолчанию

не сработало,
вообще, этот сервис определил кодировку как latin(iso8859-1)

вот мой новый код, по другому пока никак не работает:
Код:
        public string FromLatin2(string str1)
        {
            var latin = Encoding.GetEncoding("ISO-8859-1");
            var def = Encoding.Default;
            var bs0 = latin.GetBytes(str1); //получаю строку в виде массива байт
            byte[] bs2; string str2;
            bs2 = new byte[bs0.Length * 2];
            for (int i = 0; i < bs0.Length; i++)
            {
                bs2[i * 2] = bs0[i];
            }
            str2 = def.GetString(bs2);  // получаю строку вида: "Э\0т\0о\0 \0о\0б\0ы\0ч\0н\0а\0я\0 \0с\0т\0р\0о\0к\0а\0"

            var str3 = "";
            for (int i = 0; i < bs2.Length; i += 2)
            {
                str3 += str2[i]; // беру только значимые символы
            }
            return str3;
        }
однако мне нужно обрабатывать книги, и на это уйдет слишком много времент таким способом

Последний раз редактировалось D][mon; 01.08.2014 в 01:10.
D][mon вне форума Ответить с цитированием
Старый 01.08.2014, 07:41   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Я накропал такое

Код:
string str1 = "Ýòî îáû÷íàÿ ñòðîêà";
str1 = str1.Replace(" ", " & # 3 2 ; ");
IEnumerable<byte> bytechars = str1.Split(new char[] {';'}, StringSplitOptions.RemoveEmptyEntries).Select(ch => byte.Parse(ch.Trim('#', '&')));
Encoding def = Encoding.Default;
string result = def.GetString(Encoding.Convert(Encoding.GetEncoding(1251), def, bytechars.ToArray()));
Парсер браузера при отображении этой страницы съедает выражение " & # 3 2 ; " - из него надо убирать пробелы для вставки в код. Возможно реплейс из моего кода Вам не понадобится, т.к. есть предположение, что пробелы в Вашей строке и есть результат замены браузером при отображении.

Что интересно - обрамляя исходную строку тегом php - браузер сразу покажет искомых кракозябриков

Последний раз редактировалось phomm; 01.08.2014 в 08:38.
phomm вне форума Ответить с цитированием
Старый 01.08.2014, 08:03   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
этот сервис определил кодировку как latin(iso8859-1)
Ессно )
Там же ни одного кириллического символа )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.08.2014, 04:18   #6
D][mon
Форумчанин
 
Регистрация: 05.01.2010
Сообщений: 150
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ессно )
Там же ни одного кириллического символа )
Изначальный текст "Это изначальная строка"
D][mon вне форума Ответить с цитированием
Старый 04.08.2014, 08:02   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Изначальный текст
Так то изначальный. Скармливаешь ты сервису то что из клипбоарда вышло? А там уже закодировано.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
1251.nls 1252.nls sotiomake Помощь студентам 6 12.05.2013 18:59
Преобразование Stasiksis Общие вопросы C/C++ 2 28.02.2013 10:27
преобразование Drulya Помощь студентам 0 05.01.2011 18:17
преобразование Dimarik Общие вопросы .NET 2 20.04.2010 20:57
Преобразование... prizrak1390 Общие вопросы Delphi 2 02.04.2008 11:24