Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
twinzco
0 / 0 / 0
Регистрация: 05.09.2017
Сообщений: 2
1

Encoding.Convert() не срабатывает как ожидается

05.09.2017, 17:50. Просмотров 1218. Ответов 3

Здравствуйте,
Ниже код, который мне не дает никакого результата.
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        Dim srcString As String = "дКЪ мХЙНКЮЪ"
        Dim srcCP As Encoding = Encoding.GetEncoding("koi8-r")
        Dim dstCP As Encoding = Encoding.GetEncoding("windows-1251")
    
        Dim srcBytes As Byte() = srcCP.GetBytes(srcString)
 
        Dim dstBytes As Byte() = Encoding.Convert(srcCP, dstCP, srcBytes)
   
        Dim dstChars(dstCP.GetCharCount(dstBytes, 0, dstBytes.Length) - 1) As Char
        dstCP.GetChars(dstBytes, 0, dstBytes.Length, dstChars, 0)
        Dim dstString As New String(dstChars)
    
        Console.WriteLine("Original string: {0}", srcString)
        Console.WriteLine("converted string: {0}", dstString)
Что я делаю не так? Помогите пожалуйста. Весь день потерял.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2017, 17:50
Ответы с готовыми решениями:

Чем отличается Encoding.Unicode от Encoding.UTF16
я вот что то не пойму чем отличается Encoding.Unicode от Encoding.UTF16? и почему в браузерах...

Почему реализация ГОСТ 89 работает с Encoding.UTF8 и не работает с Encoding.ASCII?
Класс GOSTCrypto //S-блок protected byte S_Block = { new byte {...

не работает PHP как ожидается
Извиняюсь что о том же спрашиваю опять но никто в прошль1й раз так и не ответил.Прошу если кто...

#define работает не так, как ожидается
Здравствуйте. Подскажите, пожалуйста, почему в таком случае некорректно использовать #define: ...

Почему malloc работает не так, как ожидается?
int main() { int* p =malloc(sizeof(int)); p=5; printf("%s\n",strerror(errno)); ...

3
OwenGlendower
Супер-модератор
Эксперт .NET
11507 / 9690 / 4067
Регистрация: 17.03.2014
Сообщений: 19,333
Записей в блоге: 1
Завершенные тесты: 2
05.09.2017, 18:00 2
Лучший ответ Сообщение было отмечено twinzco как решение

Решение

twinzco, метод Convert преобразует байты описывающие символы в одной кодировке в байты описывающие такие же символы в другой кодировке. Именно поэтому приведенный код не меняет строку. Что здесь на самом деле нужно сделать так это интерпретировать байты из koi8-r как байты из windows-1251:
vb.net
1
2
3
4
5
6
7
8
9
Dim srcString As String = "дКЪ мХЙНКЮЪ"
Dim srcCP As Encoding = Encoding.GetEncoding("koi8-r")
Dim dstCP As Encoding = Encoding.GetEncoding("windows-1251")
 
Dim srcBytes As Byte() = srcCP.GetBytes(srcString)
Dim dstString As String = dstCP.GetString(srcBytes)
 
Console.WriteLine("Original string: {0}", srcString)
Console.WriteLine("converted string: {0}", dstString)
1
twinzco
0 / 0 / 0
Регистрация: 05.09.2017
Сообщений: 2
05.09.2017, 19:44  [ТС] 3
Огромное спасибо!
Я правильно понимаю, что аналогично можно конвертировать все кодировки (русские)?

Добавлено через 1 час 7 минут
Отвечу сам себе, может кому-нибудь пригодится.
Вышеприведенный код у меня отлично сработал на следующих кодовых страницах:
20886
28595
866
10007
21866
28595
Читабельность текста была восстановлена. Спасибо еще раз.
0
OwenGlendower
Супер-модератор
Эксперт .NET
11507 / 9690 / 4067
Регистрация: 17.03.2014
Сообщений: 19,333
Записей в блоге: 1
Завершенные тесты: 2
06.09.2017, 00:01 4
Цитата Сообщение от twinzco Посмотреть сообщение
Я правильно понимаю, что аналогично можно конвертировать все кодировки (русские)?
Вы уже самостоятельно на это ответили. Ответ - да, можно.
0
06.09.2017, 00:01
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2017, 00:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

ConstraintSet работает не так как ожидается в Handler
Делаю визуализацию сортировки. Сначала хочу реализовать swap. Два элемента подсвечиваются красным,...

Почему цикл работает не так, как ожидается?
Двумя способами реализовал цикл, который увеличивает годовую зарплату на 10% при нажатии 'y' до тех...

Условие в цикле do while работает не так, как ожидается
Проблема в условие цикла. Вот Код.// ConsoleApplication4.cpp: определяет точку входа для...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.