Имя: Пароль:
IT
 
Проблема с кодировкой C#
0 micha
 
11.06.10
17:49
Решил сделать доброе дело написать программу которая изменяет имена mp3 файлов следующим образом  Артист_НазваниеКомпазиции.mp3 В свое время в Delphi я это делал очень просто, решил подобную вещь сделать на C#.
Возникла проблема когда я стал вытаскивать русские теги, они выходят абракодаброй например âèíòàæ.
Прошу помощи, как преобразовать строку с такой âèíòàæ в нормальную строку.
1 Господин ПЖ
 
11.06.10
17:51
юникод наверное
2 micha
 
11.06.10
17:52
Скорее всего, как его преобразовать по человечески
3 Rie
 
11.06.10
17:52
(0) В C# тип char - это Unicode.
Так и преобразовывай - коды символов у тебя есть (после &#).
4 skiller3000
 
11.06.10
17:52
tag & rename погугли
5 micha
 
11.06.10
17:53
âèíòà&#230 - это эксплорер уже поработал, а так строка по короче выглядит "??????"
6 Rie
 
11.06.10
18:10
(5) Логично выглядит. "винтаж"?
Ты б показал, как читаешь, может, что и прояснилось бы.
7 micha
 
11.06.10
18:11
да Винтаж
8 micha
 
11.06.10
18:12
пробывал следующий кусок

           Encoding srcEncodingFormat = Encoding.UTF8;
           Encoding dstEncodingFormat = Encoding.GetEncoding("windows-1251");
           byte[] originalByteString = srcEncodingFormat.GetBytes(u.Title);
           byte[] convertedByteString = Encoding.Convert(srcEncodingFormat,dstEncodingFormat, originalByteString);
           
           string finalString = dstEncodingFormat.GetString(convertedByteString);

           textBox1.Text = finalString;

не помогает
9 Rie
 
11.06.10
18:13
(7) Ты читаешь по байтам строку в Windows 1251. А в C# строки - это Unicode.
10 Rie
 
11.06.10
18:14
(8) У тебя, судя по всему, u.Title - в windows-1251, а не в UTF8.
11 micha
 
11.06.10
18:56
StreamReader sr = new StreamReader(u.Title.ToString(), Encoding.GetEncoding(1251)); тоже не работает выдает ошибку

Файл "D:\kpk\prog\windows\3\Tegi_mp3_4\Tegi_mp3_4\bin\Debug\?????? (???????? ????)" не найден.
12 Rie
 
11.06.10
18:59
(11) У тебя u.Title - это кто?
Убери из (8) UTF8 и просто перекодируй windows-1251 в обычную C# строку. Что получится?
13 micha
 
11.06.10
19:04
(12) Title это название песни

   Encoding srcEncodingFormat = Encoding.Default;
   Encoding dstEncodingFormat = Encoding.GetEncoding("windows-1251");
   byte[] originalByteString = srcEncodingFormat.GetBytes(u.Title);
   byte[] convertedByteString = Encoding.Convert(srcEncodingFormat, dstEncodingFormat, originalByteString);
   string finalString = dstEncodingFormat.GetString(convertedByteString);
   textBox1.Text = finalString;

finalString строка = Ei?iee (aa?a?ieo oeeo)
14 micha
 
11.06.10
19:06
получилась абракодабра = Ei?iee (aa?a?ieo oeeo)
15 Rie
 
11.06.10
19:06
(13) Это понятно, что название песни. Тип у него какой?
И откуда куда ты преобразовываешь? _Из_ windows-1251 или всё же _в_ windows-1251?
Подумай над этим.
16 micha
 
11.06.10
19:09
(15)

u.Title тип string

Предлагаете  из windows-1251 в UTF8?
17 Rie
 
11.06.10
19:11
(16) Не надо никаких UTF8.
Либо в u.Title уже и так лежит "правильная" Unicode-строка. Либо эти _байты_ преобразовать из Windows-1251 в Unicode.
18 micha
 
11.06.10
20:31
Опытным путем взял значение u.Title получил ?????? (???????? ????) пошел на сайт http://www.artlebedev.ru/tools/decoder/ и получил результат
Короли (вечерних улиц)
CP1252 ? CP1251

Такое впечатление что проблема в винде
19 micha
 
11.06.10
20:41
Encoding srcEncodingFormat = Encoding.GetEncoding("windows-1252");
   byte[] originalByteString = srcEncodingFormat.GetBytes(u.Title);
   textBox1.Text = Encoding.Default.GetString(originalByteString);

Это решение проблемы, всем спасибо!!!!!!!!!
20 micha
 
11.06.10
22:30
Это все работает когда кодировка windows-1252, если кодировка другая то нет. Вопрос как программно узнать кодировку строки??????
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс