Получение кириллицы из ANSI BAT файла

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Получение кириллицы из ANSI BAT файла

Сообщение jangle » 15.02.2010 (Пн) 14:58

Никак не могу понять, почему неправильно перекодируется кириллическая командная строка из батника? Батник же передает командную строку в OEM, и мне надо только преобразовать ее обратно в ANSI.

Код: Выделить всё
Option Explicit
Public Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long

Public Function ToWin(sText As String) As String
    ToWin = Space(Len(sText))
    OemToChar sText, ToWin
End Function

Sub Main()
  MsgBox ToWin(Command)
End Sub


BAT файл:

Код: Выделить всё
project1.exe Привет


При запуске выдает: жи°Єїк

Конечно можно писать BAT файлы в OEM кодировке, но это же извращение :?

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Получение кириллицы из ANSI BAT файла

Сообщение Twister » 15.02.2010 (Пн) 15:13

Пальцем в небо: OemToCharW?
А я все практикую лечение травами...

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Получение кириллицы из ANSI BAT файла

Сообщение iGrok » 15.02.2010 (Пн) 15:15

Не. Вы удивитесь, но CharToOem.

А вот с какого фига именно так - вопрос не ко мне.

З.Ы. Только всё равно не поможет. Потому что за каким-то фигом к ним кто-то по дороге уже применил OemToChar, и часть символов ("П") побилась.
label:
cli
jmp label

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Получение кириллицы из ANSI BAT файла

Сообщение jangle » 15.02.2010 (Пн) 15:19

Twister писал(а):Пальцем в небо: OemToCharW?


У меня же не Юникод.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Получение кириллицы из ANSI BAT файла

Сообщение jangle » 15.02.2010 (Пн) 15:21

iGrok писал(а):З.Ы. Только всё равно не поможет. Потому что за каким-то фигом к ним кто-то по дороге уже применил OemToChar, и часть символов ("П") побилась.


Это консоль применила. Но как теперь восстановить строку?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Получение кириллицы из ANSI BAT файла

Сообщение iGrok » 15.02.2010 (Пн) 15:27

jangle писал(а):Это консоль применила. Но как теперь восстановить строку?

Никак. Преобразование-то нетождественное.
Точее, какую-то часть строки ты восстановишь при помощи CharToOem. Остальное - невосстановимо.
Последний раз редактировалось iGrok 15.02.2010 (Пн) 15:35, всего редактировалось 3 раз(а).
label:
cli
jmp label

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Получение кириллицы из ANSI BAT файла

Сообщение jangle » 15.02.2010 (Пн) 15:32

iGrok писал(а):
jangle писал(а):Это консоль применила. Но как теперь восстановить строку?

Никак. Преобразование-то нетождественное.
Точее, какую-то часть строки ты восстановишь при помощи CharToOem. Остальное - невосстановимо.


Ерунда какая-то получается. Выходит, что батники можно писать только в CP866 ?
Не верю, не может такого быть... В Windows даже блокнот не умеет в ней сохранять.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Получение кириллицы из ANSI BAT файла

Сообщение iGrok » 15.02.2010 (Пн) 15:35

Нашёл.

Код: Выделить всё
chcp 1251
project1.exe Привет
label:
cli
jmp label

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Получение кириллицы из ANSI BAT файла

Сообщение jangle » 15.02.2010 (Пн) 15:48

iGrok - спасибо, действительно работает. А можно ли переключить CP программно, а не из батника?

Upd. Нашел как программно переключить CP

Код: Выделить всё
SetConsoleCP 1251


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

    TopList