powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как такой текст (в сообщении) сконверить в обычный читабельный вид (utf-8, unicode)
7 сообщений из 7, страница 1 из 1
как такой текст (в сообщении) сконверить в обычный читабельный вид (utf-8, unicode)
    #38029588
abort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ест такой текст ЋЊЂ‰Ќ ЉЂ‡Ђ•‘’ЂЌ
данный текст получается в результате автоматической генерации с использованием киргизского шрифта
Каким образом это отобразить в XML в правильном читаемом виде. Пробовал через все известные encoding типы - не помогло
...
Рейтинг: 0 / 0
как такой текст (в сообщении) сконверить в обычный читабельный вид (utf-8, unicode)
    #38029613
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
abortПробовал через все известные encoding типы - не помогло
И кодовую страницу явно указывали?

вроде Encoding.GetEncoding(1251) ?

А не только встроенные типа Encoding.UTF8 ?
...
Рейтинг: 0 / 0
как такой текст (в сообщении) сконверить в обычный читабельный вид (utf-8, unicode)
    #38029691
abort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делаю вот так:
Код: 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.
 string st = null;
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(@"<?xml version='1.0' encoding='utf-8' ?> 
            <root> 
                  <property name='R1' value='' /> 
                    <property name='R2' value='' /> 
                    <property name='R3' value='' /> 
            </root>
            ");
            int i = 0;
            string res = null;
            using (StreamReader SR = new StreamReader(@"C:\temp\1.pqs", System.Text.Encoding.UTF8))
            {
                while (SR.Peek() >= 0)
                {
                    st = SR.ReadLine();                    
                    string s = st;
                    byte[] b = System.Text.Encoding.UTF8.GetBytes(s);
                    byte[] bb = System.Text.Encoding.Convert(System.Text.Encoding.UTF8, System.Text.Encoding.GetEncoding(1251), b);

                    string ansi_str = System.Text.Encoding.GetEncoding(1251).GetString(bb);
                    System.String ss = ansi_str;
                    StreamWriter SW = new StreamWriter(@"c:\temp\" + i.ToString() + ".txt", true, System.Text.Encoding.GetEncoding(1251));
                    SW.WriteLine(ss);
                    SW.Close();                    

                    doc.DocumentElement.ChildNodes[i].Attributes["value"].Value = ss;
                    i++;
                }
                doc.Save(@"c:\temp\1.xml");
            }

        }


Все равно не работает
...
Рейтинг: 0 / 0
как такой текст (в сообщении) сконверить в обычный читабельный вид (utf-8, unicode)
    #38029876
abort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем, решение нашел
...
Рейтинг: 0 / 0
как такой текст (в сообщении) сконверить в обычный читабельный вид (utf-8, unicode)
    #38030093
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abort,

приведенный код демонстирует непонимание что такое кодировка и как устроен строковый тип в .NET. Для начала советую прочитать The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) .

1) Строки в .NET хранятся как последовательность байтов в кодировке UTF-16. Поэтому бесполезно пытаться получить строку в любой другой кодировке. Подчеркну - речь именно о строке. Массив байтов соответствующий строке в определенной кодировке мы можем получить, строку нет. Поэтому данный код является бессмысленным:
Код: c#
1.
2.
3.
4.
string s = st;
byte[] b = System.Text.Encoding.UTF8.GetBytes(s);
byte[] bb = System.Text.Encoding.Convert(System.Text.Encoding.UTF8, System.Text.Encoding.GetEncoding(1251), b);
string ansi_str = System.Text.Encoding.GetEncoding(1251).GetString(bb);


На выходе (в переменной ansi_str) мы получим строку в кодировке UTF-16 с символами которые могут быть представлены в кодировке windows-1251. Это означает, что если у нас на входе строка с русским и японским текстом, то на выходе мы получим только русский текст. Японские иероглифы будут заменены на вопросительные знаки т.к. в однобайтовой кодировке windows-1251 они не представлены.

Раз ты работаешь с киргизским алфавитом, то тебе нужно использовать одну из кодировок семейства Unicode или кодировку специфическую для киргизского языка.

2) В коде два раза встречаются строки где ты объявляешь временную строковую переменную только ради одной операции:
Код: c#
1.
2.
3.
4.
5.
st = SR.ReadLine();                    
string s = st;
...
string ansi_str = System.Text.Encoding.GetEncoding(1251).GetString(bb);
System.String ss = ansi_str;


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

3) Код записи в файл можно упросить, если использовать метод File.AppendAllText(). Вместо:
Код: c#
1.
2.
3.
StreamWriter SW = new StreamWriter(@"c:\temp\" + i.ToString() + ".txt", true, System.Text.Encoding.GetEncoding(1251));
SW.WriteLine(ss);
SW.Close();


Пишем:
Код: c#
1.
File.AppendAllText(@"c:\temp\" + i.ToString() + ".txt", ss, System.Text.Encoding.GetEncoding(1251));



4) Если ты постоянно используешь Encoding, то почему не добавить соответствующий using чтобы не писать каждый раз полное имя типа?

abortСпасибо всем, решение нашел
Приведи его, если несложно.
...
Рейтинг: 0 / 0
как такой текст (в сообщении) сконверить в обычный читабельный вид (utf-8, unicode)
    #38030263
abort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,

Вот решение, с помощью которого удалось перевести с DOSовской кириллицы
Код: c#
1.
2.
  st = SR.ReadLine();
  SB.AppendLine(System.Text.Encoding.GetEncoding(866).GetString(System.Text.Encoding.Default.GetBytes(st)));


За ссылки спасибо
...
Рейтинг: 0 / 0
как такой текст (в сообщении) сконверить в обычный читабельный вид (utf-8, unicode)
    #38030288
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abortВот решение, с помощью которого удалось перевести с DOSовской кириллицы
Код: c#
1.
2.
  st = SR.ReadLine();
  SB.AppendLine(System.Text.Encoding.GetEncoding(866).GetString(System.Text.Encoding.Default.GetBytes(st)));


Плохое решение. Если ты читаешь файл в DOS кодировке, то создавай StreamReader сразу с нужной кодировкой:
Код: c#
1.
using (StreamReader SR = new StreamReader(@"C:\temp\1.pqs", Encoding.GetEncoding(866)))



Про поле Encoding.Default забудь и никогда не пользуйся. Такой кодировки нет. Код будет работать по разному в зависомости от того под какой Windows и с какими региональными настройками запускается программа.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как такой текст (в сообщении) сконверить в обычный читабельный вид (utf-8, unicode)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]