Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.99/67: Рейтинг темы: голосов - 67, средняя оценка - 4.99
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 139

Перекодировка Unicode в Win1251 и наоборот

10.01.2011, 11:10. Показов 13781. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня проблема с ХР и Win98. Создаю документ в ХР потом проблема его чтения.. это как пример.
Суть в вопросе: нужен код конвертирования из Unicode в Win1251 ( в т.ч. русский текст) и наоборот
Кто первый подскажет. Идеи не надо, кокретно код или незанимать Интернет:)
Спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.01.2011, 11:10
Ответы с готовыми решениями:

Конвертация из DOS866 в Win1251
привет всем! кто подскажет как конвертнуть дос кодировку в вин.

Конвертация из UTF-8 в Win1251 - А где решение?
Comanche, это хорошо, что ты разобрался, но ведь и другие хотели бы знать решение. В чем была проблема? Возможно, что ты не учитывал,...

Перекодировка из KOI-8 в Win1251.
Кто-нибудь может дать код перекодировки строки из KOI-8 в Win-1251?

23
2 / 2 / 1
Регистрация: 19.07.2007
Сообщений: 737
10.01.2011, 11:42
Visual Basic
1
s=vba.StrConv(ss,vbFromUnicode)
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
10.01.2011, 11:54
Visual Basic
1
2
3
4
5
6
7
8
9
10
Dim s As String
Dim c As Integer
Dim b(1) As Byte
c = 1092 ' код буквы ф в UNICODE
b(0) = c Mod 256
b(1) = c  256
s = b
MsgBox (s) ' ы
с = Asc(s)
MsgBox с ' Код первой буквы в ANSI
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
10.01.2011, 11:56
Исправление
Visual Basic
1
2
3
4
5
6
7
8
9
10
Dim s As String
Dim c As Integer
Dim b(1) As Byte
c = 1092 ' код буквы ф в UNICODE
b(0) = c Mod 256
b(1) = c  256
s = b
MsgBox (s) ' ф
с = Asc(s)
MsgBox с ' Код буквы ф в ANSI
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 139
10.01.2011, 12:30  [ТС]
1. Для Kons one: Спасибо - как внедрю
s=vba.StrConv(ss,vbFromUnicode)
будет еще раз спасибо...но если можно, не отходя от 'кассы', - это код только для VBA?

2. А вот по поводу предложения 'pava' - мне понято? но только то, что если я буду знать где взять код букв в unicode, то преобразую.
Поэтому к 'palve' - а как все же узнать эти коды?
Для Ascii - есть таблицы, а ..??
спасибо, во первых и все же от palve жду подробнее

Пока ситуация как на лекции: Профессор рассказал как идет ток через лампочку и что она светит... Вопросы есть? Один студент понимает руку и спрашиват: 'А куда керосин наливают?'
Во так и я. Спасибо
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
10.01.2011, 12:40
Я понял так, что если вам нужно 'перекодировать', то у вас уже есть исходный код. То есть вы читаете файл офисного документа командой Get в переменную типа Integer. Там у вас и будет нужный код. Или я вас неправильно понял?
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
10.01.2011, 12:57
А если вам нужен код какой-нибудь буквы
Visual Basic
1
2
3
4
5
6
7
8
9
Dim s As String
Dim c As Integer
Dim b() As Byte
s = 'ф' ' Буква хранится в кодировке UNICODE
b = s
c = b(1) * 256 + b(0)
' как вариант, без использования динамического байтового массива
' c = AscB(MidB(s, 2, 1)) * 256 + AscB(MidB(s, 1, 1))
MsgBox c ' Код буквы ф
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 139
10.01.2011, 13:13  [ТС]
pavla - не совсем так. Пока конкретно примера нет. Поэтому предложу проще: у меня имеется файл, и знаю, что он текстовый но в Unicoe.
Если я его открываю по DOS-ки из панели Norton Comander for Windows даже через 'F3' - то я виже абракодабру... и только латынь читается как есть.
Если это проделать с файлом Win98 - то все читается, но и через 'F4', сам откроется Notepad и так же все читаем.!!
А если открыть файл Open File as Binary, из VB - похоже ответ [Konst_one] самoе то? что мне надо и это как ответ на ваш встречный вопрос:
- 'То есть вы читаете файл офисного документа командой Get в переменную типа Integer' - а как имеете вы ввиду через GET или я фактически ответил?
СПАСИБО, жду спорных разговоров. А в споре рождается истина!
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 139
10.01.2011, 13:15  [ТС]
P.s. - и все же мне не ответили еще, отвлеклись:
Поэтому к 'palve' - а как все же узнать эти коды?
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
10.01.2011, 13:31
Unicode тоже разный бывает. UTF-8 тоже называют Unicode, там латынь идет как есть, по одному байту на символ, а русские буквы по два байта. Если у вас этот случай, то методы которые мы здесь обсуждали неприменимы. Для того, чтобы из этих двух байтов получить настоящий Unicode, нужно использовать API-функцию MultiByteToWideChar.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 139
10.01.2011, 13:42  [ТС]
Palva, я сказал как я вижу. Очевидно это и есть такой случай.
Тогда, пожалуйста, если можно: - где есть полный пример передировки для моего данного случая.
А вот второй пример, когда я копирую из текста в ХР, а потом вставлюя в код VB6 - я читаю абракодабру!!!! И наоборот
Копирую из окна (Text1.Text, например) запущенного проекта программы текст и всталяю в отдельно вызванный Лист1 Exel ручным способом, то же абр....!
Возможно это второй вариант или то же, я незнаю. Но отрицательный эффект нужно исправить!
СПАСИБО!
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
10.01.2011, 13:44
Если вам нужна таблица кодов Unicode, то можете определить ее также, как я определял код буквы ф.

О кодировках в VB можно почитать здесь:

http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/VBA/Decoder/VBVariables1_2.mspx
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 139
10.01.2011, 14:04  [ТС]
Palva - ну, спасибо. Убил наповал! Конечно, нужно обсосать... поработать. Но все прекрасно. Ниточку я зацепил.
Это как в анекдоте: выпил мужик три пузыря и еще хочет, а денег только на чекушку. ..Купил и упал...но сид хватило подумать, зачем я так много выпил, купм бы чекшку...
СПАСИБО. Пока.
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
10.01.2011, 14:33
Вот как преобразуют из UTF-8 в Unicode:
Visual Basic
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
Const CP_UTF8 = 65001
Private Declare Function MultiByteToWideChar Lib 'Kernel32.dll' _
( _
  ByVal CodePage As Long, _
  ByVal dwFlags As Long, _
  ByRef lpMultiByteStr As Byte, _
  ByVal cbMultiByte As Long, _
  ByRef lpWideCharStr As Byte, _
  ByVal cchWideChar As Long _
) As Boolean
Sub test()
Dim b(7) As Byte
Dim i(7) As Byte
Dim s As String
' Прочитали b из файла, например, следующие значения
b(0) = &HD1 ' ф
b(1) = &H84 '
b(2) = &HD1 ' ы
b(3) = &H8B '
b(4) = &HD0 ' в
b(5) = &HB2 '
b(6) = &HD0 ' а
b(7) = &HB0 '
If MultiByteToWideChar(CP_UTF8, 0, b(0), 8, i(0), 4) Then
  s = i
  MsgBox (s) ' фыва
End If
End Sub
А дальше уже функцией Asc можно получить ANSI-код произвольного символа. Только подзреваю, что вам это не нужно.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 139
10.01.2011, 14:50  [ТС]
.... ну это уже сил нет отвечать, добиваешь меня palva
и как это может не пригодиться: я как 'Плюшкин', мне все надо... это все та же цепочка тянется. Однозначности в программировании не бывает, изменишь чуть-чуть, а как приятно :)
С П А С И Б О !!!!
... тольеко на сегодня хотя бы. Я ничего не успел применить для своего варианта. Хотя этоне просто.
То отвечаю на форуме, то работа дергает. Спасибо., если считаешь нужным, все что касается воруг этой темы, пиши !
С уважением, Дмитри
0
0 / 0 / 0
Регистрация: 04.03.2008
Сообщений: 250
12.01.2011, 10:53
Тема неожиданно оказалась интересной и для меня. Задача такая – есть текстовый файл, который надо разбирать построчно, что я и делаю через FSO, открывая его, как TextStream.
Текст в основном на латинице, но среди внятного английского текста встретились кракозябры. При более детальном исследовании кракозябры вполне по-русски прочитались в Word’е, после того, как я выбрал кодировку UTF-8. Это, видимо, та самая кодировка, о которой говорил palva. В связи с этим у меня к Вам, palva, вопрос – не прокомментируете ли подробнее вашу рекомендацию по преобразованию UTF-8 в удобочитаемый текст? В кодировках я не слишком силен, сходу сам в проблеме не разобрался.
0
Messir
12.01.2011, 11:16
Что-то вспомнилась реклама 'А вы все еще вывариваете? Тогда мы идем к вам...' (можно считать, что на правах рекламы .net)
0 / 0 / 0
Регистрация: 04.03.2008
Сообщений: 250
12.01.2011, 11:22
Все верно, Messir, в MSDN нашел все, что надо, но для дот-нет. Но мы по ряду причин 'все еще кипятим'. Так что вопрос остается открытым - как справиться с UTF-8.
0
Messir
12.01.2011, 11:56
Я что-то не могу понять ваших проблем, господа
Сначала MultiByteToWideChar, потом WideCharToMultiByte - и никаких проблем, чего кипятиться-то?
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
12.01.2011, 12:04
Ну если на бейсике, то можно результат MultiByteToWideChar (массив Byte) положить в строку и сразу иметь корректную строку, как в примере выше. Если надо преобразовывать в ANSI, OEM или еще куда, то тогда конечно WideCharToMultiByte, хотя для ANSI достаточно бейсиковской Asc. Еще один вопрос - это какого размера должен быть байтовый массив, чтобы вместить перекодированную строку. MSDN здесь пишет, что для этого MultiByteToWideChar должна иметь нулевой параметр (не помню какой), и тогда функция возвратит вам необходимый размер.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.01.2011, 12:04
Помогаю со студенческими работами здесь

Перекодировка из EBCDIC в win1251
Помогите пожалуйста составить прогу перекодировки файла из EBCDIC в win1251

Перекодировка текста в Unicode
В программе получаю через сокетное соединение сообщение содержащие русский тект в кодировке cp1251. Надо перекодировать в уникод для вывода...

Apache : перекодировка windows-1251-> unicode/utf-8
Проблема такого плана, необходимо средствами сервера заставить перекодировать 'на лету' файлы хранящиеся на сервере в кодировке ...

Перекодировка из UNICODE "на лету"
Файл принимает данные из формы. Данные, по ходу, в UNICODE? : тест (это русское слово 'тест') Если на странице-приемнике...

Есть ли функция PHP для преобразования ANSI в UTF-8 или Unicode и наоборот?
Здравствуйте. Я хочу программно ввести в базу данных MySql русский текст. Через PHP-admin сайтхостинга это получается, но на сайте он...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru