Описание функции


ToCP1251

Преобразует строку в кодировку Windows1251 (русская).

ToCP1251(*s.Unicode)

Параметры

*s.Unicode Указатель на строку в Unicode

Возвращаемое значение

ничего

Примечания

Полезно в Linux при чтении ANSI-файлов, где отсутствует поддержка ANSI кодировок на уровне ОС. В идеале содержимое секции DataSection должно находится во внешних файлах, чтобы программа подгружала нужную национальную кодировку взависимости от языка ОС.

См. также

ToCP1252

Пример

; AZJIO
; https://www.purebasic.fr/english/viewtopic.php?p=617388#p617388
EnableExplicit

Procedure ToCP1251(*s.Unicode)
    Protected i
    Protected *ptr.Unicode

    While *s\u
        If *s\u > 127 And *s\u < 256
;         If (*s\u > 127 And *s\u < 160) Or (*s\u > 160 And *s\u < 256)
            *ptr = ?CP1251 + (*s\u - 128) * 2
            *s\u = *ptr\u
        EndIf
        *s + SizeOf(Unicode)
    Wend
EndProcedure


Define i, Text$

; Генерируем строку
For i = 224 To 255
    Text$ + Chr(i)
Next
For i = 192 To 223
    Text$ + Chr(i)
Next

Debug Text$ ; 1252
ToCP1251(@Text$)
Debug Text$ ; 1251

DataSection
    CP1251:
    Data.u 1026, 1027, 8218, 1107, 8222, 8230, 8224, 8225, 8364, 8240, 1033
    Data.u 8249, 1034, 1036, 1035, 1039, 1106, 8216, 8217, 8220, 8221, 8226
    Data.u 8211, 8212, 152, 8482, 1113, 8250, 1114, 1116, 1115, 1119, 160
    Data.u 1038, 1118, 1032, 164, 1168, 166, 167, 1025, 169, 1028, 171
    Data.u 172, 173, 174, 1031, 176, 177, 1030, 1110, 1169, 181, 182
    Data.u 183, 1105, 8470, 1108, 187, 1112, 1029, 1109, 1111, 1040, 1041
    Data.u 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052
    Data.u 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063
    Data.u 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074
    Data.u 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085
    Data.u 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096
    Data.u 1097, 1098, 1099, 1100, 1101, 1102, 1103
EndDataSection