Корректная перекодировка KOI в WIN


Для корректной перекодировки необходимо пользоваться установленными в системе кодовыми таблицами и функциями MultiByteToWideChar() или WideCharToMultiByte(). Так как перекодировка идет через Юникод, предположительно будет максимальное соответствие (а не так, как, например, в Far Manager, когда все перекодировки ведутся через 866 таблицу - откуда потери несуществующих в ней символов, даже если они есть в исходной и конечной таблицах).

Методом научного тыка (EnumSystemCodePages), первоначально под Windows 2000, обнаружены следующие (интересующие русскоговорящего человека) таблицы (цитирую заголовок):

#define CP_KOI8R 20866
#define CP_KOI8U 21866
#define CP_ISO_8859_5 28595

Несмотря на то, что при использовании EnumSystemCodePages() под Windows 98/95они не включаются в перечисление , тем не менее, при установленном IE4.0 и выше MultiByteToWideChar()/WideCharToMultiByte() с успехом работает с этими константами.

В принципе, можно сделать универсальную табличную перекодировку, если сохранить перекодировочные таблицы Юникод -> [интересующие таблицы], и затем, без вызова MultiByteToWideChar/WideCharToMultiByte "на месте" посимвольно преобразовавать строки.

 
« Предыдущая статья   Следующая статья »