Описание функции
detectTextEncodingInBuffer
Определить кодировку текста по указателю.
detectTextEncodingInBuffer(*buffer, length, flags = 0)
Параметры
buffer | Указатель на текст, например данные при открытии файла с помощью ReadData |
length |
Длина в байтах, например ReadData возвратит число прочитанных файт |
flags |
Битовые флаги набор из следующих #disallowNulls - не позволятm Null быть в кодировке ASCII или Unicode (UTF-8, UTF-16 и UTF-32) #enforceProperSurrogateCodes - суррогатные коды должны быть соединены в правильном порядке #restrictSurrogateCodesToUTF16 - разрешать суррогатные коды только в кодировках UTF-16 |
Возвращаемое значение
Возвращает число, которое соответсвует стандартным константам PureBasic:Примечания
Также модуль содержит функции:Пример
; Demivec
; https://www.purebasic.fr/english/viewtopic.php?p=478874
EnableExplicit
XIncludeFile "AutoDetectTextEncoding.pbi"
Procedure OpenFileToSci(FilePath$)
Protected length, oFile, bytes, *MemFile, g_Format
oFile = ReadFile(#PB_Any, FilePath$)
If oFile
g_Format = ReadStringFormat(oFile) ; считываем метку BOM
length = Lof(oFile)
*MemFile = AllocateMemory(length)
If *MemFile
bytes = ReadData(oFile, *MemFile, length)
If bytes
If g_Format = #PB_Ascii ; нет метки, но файл всё ещё может быть в формате UTF-8
g_Format = dte::detectTextEncodingInBuffer(*MemFile, bytes, 0)
If g_Format = #PB_Ascii
Debug "Ascii"
ElseIf g_Format = #PB_UTF8
Debug "UTF-8 без BOM"
Else
Debug "Один из редких форматов"
EndIf
Else
Debug "#PB_UTF8 с BOM"
EndIf
MessageRequester("", PeekS(*MemFile, -1, g_Format))
FreeMemory(*MemFile)
EndIf
EndIf
CloseFile(oFile)
EndIf
EndProcedure
OpenFileToSci("C:\file.txt")