Описание функции
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