Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 15.10.2022
Сообщений: 64

Предлагаю декодер UTF-8 в кирилицу

02.08.2024, 08:20. Показов 843. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Лично для меня в силу малого знания постоянно доставляют проблемы с кодировкой текста. В общем, заморочился и и за пару часов написал простенький декор. Может кому пригодится.
Определяем кодировку isCoding(string text) (true -Win1251, false - UTF-8) и кодирует текст прямо в текстбоксе из крякозяблей UTF-8 нормальный текст. Класс сырой, мало текстировался. И как новичок код, наверное, не красивый с точки зрения профессионала. Но я только учусь.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
class Coder
    {
        static string Win1251Low = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя«»";
        static string Win1251Up = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ«»";
       
        
        static public string[] UT8Low = { "Р°", "Р±", "РІ", "Рі", "Рґ", "Рµ", "С‘", "Р¶", "Р·", "Рё", "Р№", "Рє", "Р»", "Рј", "РЅ", "Рѕ", "Рї", "СЂ", "СЃ", "С‚", "Сѓ", "С„", "С…", "С†", "С‡", "С€", "С‰", "СЉ", "С‹", "СЊ", "СЌ", "СЋ", "СЏ", "В«", "В»" };
        static public string[] UT8Up = { "Рђ", "Р‘", "Р’", "Р“", "Р”", "Р•", "РЃ", "Р–", "Р—", "Р˜", "Р™", "Рљ", "Р›", "Рњ", "Рќ", "Рћ", "Рџ", "Р ", "РЎ", "Рў", "РЈ", "Р¤", "РҐ", "Р¦", "Р§", "РЁ", "Р©", "РЄ", "Р«", "Р¬", "Р", "Р®", "РЇ", "В«", "В»" };
 
        static public bool isCoding(string text)
        {
            bool boo = false;
            string s = text;
 
            int cou = Coder.UT8Low.Length;
            for (int i = 0; i < s.Length; i++)
            {
                if (i == s.Length - 1) break;
 
                for (int j = 0; j < cou; j++)
                {
 
                    string t = $"{s[i].ToString()}{s[i + 1].ToString()}";
                    string co = UT8Low[j].ToString();
                    if (t == co)
                    {
                        //MessageBox.Show($"{t}_{i.ToString()} {co}");
                        return boo = false;
                    }
                }
            }
 
            for (int i = 0; i < s.Length; i++)
            {
                if (i == s.Length - 1) break;
 
                for (int j = 0; j < cou; j++)
                {
                    string t = $"{s[i].ToString()}{s[i + 1].ToString()}";
                    string co = UT8Low[j].ToString();
                    if (t == co)
                    { return boo = false; }
                }
            }
 
             for (int i = 0; i < s.Length; i++)
            {
                for (int j = 0; j < cou; j++)
                {
                    //string sim = Coder.Win1251Low[j];
                    string t = s[i].ToString();
                    string co = Win1251Low[j].ToString();
                    if (t == co)
                    {
                        //MessageBox.Show($"{t}_{i.ToString()} {co}");
                        return boo = true;
 
                    }
                }
            }
 
            
            for (int i = 0; i < s.Length; i++)
            {
                for (int j = 0; j < cou; j++)
                {
                    if (s[i] == Win1251Up[j])
                    { return boo = true; }
                }
            }
 
 
 
            return boo;
        }
 
        static public string codeToUT8(string text)
        {
            string s = text;
            string s2 = string.Empty;
 
            for (int i = 0; i < s.Length; i++)
            {
                if (i == s.Length - 1) break;
 
                string t = $"{s[i].ToString()}{s[i + 1].ToString()}";
                for (int j = 0; j < Win1251Low.Length; j++)
                {
                    
                    //найти соответствие с UT8
                    if (t == UT8Low[j])
                        //заменить на кирилицу
                        s = s.Replace(t, Win1251Low[j].ToString());
                } 
            }
 
            for (int i = 0; i < s.Length; i++)
            {
                if (i == s.Length - 1) break;
 
                string t = $"{s[i].ToString()}{s[i + 1].ToString()}";
                for (int j = 0; j < Win1251Low.Length; j++)
                {
 
                    //найти соответствие с UT8
                    if (t == UT8Up[j])
                        //заменить на кирилицу
                        s = s.Replace(t, Win1251Up[j].ToString());
                }
            }
 
            return s;
        }
 
    }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.08.2024, 08:20
Ответы с готовыми решениями:

getBytes('UTF-16') даёт UTF-16LE или UTF-16BE?
Добрый день! Делаю J2ME-клиента к некому серверу, исходников которого у меня нет, но есть работающий клиент на C#. Выяснилось, что C#...

<globalization fileEncoding='utf-8' requestEncoding='utf-8' responseEncoding='utf-8' />
Если в коде пишу строку скажем Response.Write ('Вася дурак') - все срабатывает нормально, а если в &lt;body&gt;&lt;h1&gt;Вася...

Конвертация из ASCII в UTF-32 или UTF-8 в UTF-32
Собсно сабж.

5
Эксперт .NET
 Аватар для Rius
13237 / 7732 / 1681
Регистрация: 25.05.2015
Сообщений: 23,555
Записей в блоге: 14
02.08.2024, 08:29
Зачем, если в составе фреймворка идёт свой преобразователь, оттестированный?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,901
Записей в блоге: 1
02.08.2024, 09:00
Цитата Сообщение от ruccih Посмотреть сообщение
меня в силу малого знания постоянно доставляют проблемы с кодировкой текста
Какие именно проблемы?

Цитата Сообщение от ruccih Посмотреть сообщение
UT8 в кирилицу
Что такое UT8?
1
0 / 0 / 0
Регистрация: 15.10.2022
Сообщений: 64
02.08.2024, 09:37  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Что такое UT8?
Это UTF-8. Маленько недосмотрел.

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Какие именно проблемы?
Например, прежде, чем считать файл, нужно определить его кодировку, а я не знаю ка это сделать.

Добавлено через 56 секунд
Цитата Сообщение от Rius Посмотреть сообщение
Зачем, если в составе фреймворка идёт свой преобразователь, оттестированный?
Есть то он есть, но я пока что не нашёл как эти фрейморки применять.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,901
Записей в блоге: 1
02.08.2024, 10:20
Лучший ответ Сообщение было отмечено ruccih как решение

Решение

Цитата Сообщение от ruccih Посмотреть сообщение
Например, прежде, чем считать файл, нужно определить его кодировку, а я не знаю ка это сделать.
Есть готовые библиотеки для таких задач. Сейчас я бы использовал UTF.Unknown. Её очень просто использовать:
C#
1
2
DetectionResult result = CharsetDetector.DetectFromFile("path/to/file.txt"); // or pass FileInfo
Encoding detectedEncoding = result.Detected.Encoding;
Цитата Сообщение от ruccih Посмотреть сообщение
Это UTF-8. Маленько недосмотрел.
Угу. 2 раза в тексте и 11 в коде
1
0 / 0 / 0
Регистрация: 15.10.2022
Сообщений: 64
05.08.2024, 17:14  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
C#
1
2
DetectionResult result = CharsetDetector.DetectFromFile("path/to/file.txt"); // or pass FileInfo
Encoding detectedEncoding = result.Detected.Encoding;

Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.08.2024, 17:14
Помогаю со студенческими работами здесь

Найти Unicode символы в UTF-8 строки и преобразовать их в UTF-8 символ
Есть строка вида &quot;Hello \u0434\u0440\u0443\u0433&quot;, нужно преобразовать её в &quot;Hello друг&quot;

Программа для конвертации тектового файла из кодировки UTF-8 в UTF-16
Привет. Как можно реализовать эту программу на чистом си?

Изменить кодировку из utf-8 без bom в просто utf-8
формируется xls фаил в коде прописано response.setContexType(&quot;application/vnd.ms-excel;charset=UTF-8&quot; в эксел документе отображается...

XmlSerializer.Serialize() как поменять кодировку с UTF-16 на UTF-8
Задача серилизовать объект в string, но с кодировкой UTF-8. подзадача - как представить строку как Stream? // VALIDATE ...

Как создать рабочий XML в UTF-8? У меня исправно создаётся Windows-1251, но с UTF-8 проблема
Доброго дня, форумчане. Подскажите, что делать, чтобы создавался и открывался без ошибок XML-файл? Сейчас у меня такой код и если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru