Подскажите, как можно переконвертировать строку из 1251 кодировки в 866 и наоборот?
Если стандартных функций нет, то подскажите хотя бы диапазон кодов русских букв для обеих кодировок соответственно.
Заранее благодарен.
Re: Как переконвертить в C++ Builder строку в 866 кодировку
Здравствуйте, lightix, Вы писали:
L>Подскажите, как можно переконвертировать строку из 1251 кодировки в 866 и наоборот? L>Если стандартных функций нет, то подскажите хотя бы диапазон кодов русских букв для обеих кодировок соответственно. L>Заранее благодарен.
Здорово:
попользуй API-функции типа
BOOL CharToOem
( LPCTSTR lpszSrc, // pointer to string to translate
LPSTR lpszDst // pointer to translated string
);
+ там ещё парочка похожих: по данной ссылке в хелпе посмотришь.
Заметка: OEM — это и есть DOS кодировочка
Из протокола следствия: на обследование направляется труп без признаков смерти, в кармане трупа дискета — видимо, труп компьютерный..
Re: Как переконвертить в C++ Builder строку в 866 кодировку
U>попользуй API-функции типа U>BOOL CharToOem
Спасибо, действительно помогла
А не подскажете заодно как красиво AnsiString в char * конвертнуть?
Я пишу вот так:
AnsiString Text="текст который надо конвертить"char Src[200];
char Dst[200];
sprintf(Src,"%s",Text);
CharToOem(Src,Dst);
Text=Dst;
Но ведь в этом случае я ограничиваю длину строки 200 симв.
Можно как-то покрасивее это написать?
Re: Как переконвертить в C++ Builder строку в 866 кодировку
Здравствуйте, lightix, Вы писали:
L>Подскажите, как можно переконвертировать строку из 1251 кодировки в 866 и наоборот? L>Если стандартных функций нет, то подскажите хотя бы диапазон кодов русских букв для обеих кодировок соответственно. L>Заранее благодарен.
windows.h:
OemToAnsi/AnsiToOem
silent
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[3]: Как переконвертить в C++ Builder строку в 866 кодиров
Здравствуйте, lightix, Вы писали:
U>>попользуй API-функции типа U>>BOOL CharToOem L>Спасибо, действительно помогла L>А не подскажете заодно как красиво AnsiString в char * конвертнуть? L>Я пишу вот так:
... L>Но ведь в этом случае я ограничиваю длину строки 200 симв. L>Можно как-то покрасивее это написать?
Ну и зря ты так пишешь. Так писать — нарываться на Buffer Overrun.
Надо примерно так:
AnsiString AnsiStringToOem(AnsiString a)
{
char * tmp=new char[a.length+1];
CharToOem(a, tmp);
AnsiString res = tmp;
delete[] tmp;
return res;
}
не уверен насчет a.length — сам я на дельфи пишу. Но смысл понятен (я надеюсь
... << RSDN@Home 1.0 beta 6 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Как переконвертить в C++ Builder строку в 866 кодиров
Здравствуйте, lightix, Вы писали:
U>>попользуй API-функции типа U>>BOOL CharToOem L>Спасибо, действительно помогла L>А не подскажете заодно как красиво AnsiString в char * конвертнуть?
Можно так:
AnsiString Text = "текст который надо конвертить";
char* Dst = new char[Text.Length()+1];
CharToOem(Text.c_str(),Dst);
Text = Dst;
delete [] dst;
Re[3]: Как переконвертить в C++ Builder строку в 866 кодиров
Здравствуйте, lightix, Вы писали:
U>>попользуй API-функции типа U>>BOOL CharToOem L>Спасибо, действительно помогла L>А не подскажете заодно как красиво AnsiString в char * конвертнуть? L>Я пишу вот так: L>
L>AnsiString Text="текст который надо конвертить"
L>char Src[200];
L>char Dst[200];
L>sprintf(Src,"%s",Text);
L> CharToOem(Src,Dst);
L>Text=Dst;
L>
L>Но ведь в этом случае я ограничиваю длину строки 200 симв. L>Можно как-то покрасивее это написать?
Если в тексте могут быть символы \0 (#0), то надо использовать CharToOemBuf
и вообще, имхо, лучше использовать перкодировку именно в с такой ф-й.
Re[4]: Как переконвертить в C++ Builder строку в 866 кодиров
Здравствуйте, chia, Вы писали:
C>Если в тексте могут быть символы \0 (#0), то надо использовать CharToOemBuf C>и вообще, имхо, лучше использовать перкодировку именно в с такой ф-й.
А чем она отличается и какой ее синтаксис?
Re[5]: Как переконвертить в C++ Builder строку в 866 кодиров
C>>Если в тексте могут быть символы \0 (#0), то надо использовать CharToOemBuf C>>и вообще, имхо, лучше использовать перкодировку именно в с такой ф-й.
L>А чем она отличается и какой ее синтаксис?
BOOL CharToOemBuff(
LPCTSTR lpszSrc, // pointer to string to translate
LPSTR lpszDst, // pointer to translated string
DWORD cchDstLength // length of string to translate, in characters
);
Re: Как переконвертить в C++ Builder строку в 866 кодировку
Здравствуйте, Flamer, Вы писали: F>Позвольте поинтересоваться — а вы ответы выше вашего топика видели?
Да у меня RSDN@Home & dialup После очередной синхронизации появился вопрос, а ответов небыло. Ну я и ответил человеку. Когда засинхронизился в очередной раз — там уже 2 ответа, кроме моего
... << RSDN@Home 1.0 beta 6a >>
Re[4]: Как переконвертить в C++ Builder строку в 866 кодиров