![]() |
![]() |
![]() |
|
Проблема с кодировкой 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
|
âèíòàæ - это эксплорер уже поработал, а так строка по короче выглядит "??????"
|
|||
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, если кодировка другая то нет. Вопрос как программно узнать кодировку строки??????
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |