isUnicode/de
Zurück zur Seite Code Beispiele.
Das Unterprogramm prüft, unabhängig vom zugrunde liegenden Betriebssystem, ob es sich um eine Unicode-Datei handelt.
Das Unterprogramm ist nur dann erfolgreich, wenn die Unicode-Datei eine BOM (Byte-Order-Markierung) hat.
Unicode-Dateien ohne eine BOM können nicht zweifelsfrei als Unicode-Dateien identifiziert werden.
uses
FileUtil, ...;
...
const
conNoUnicode = 0;
conUTF1 = 1;
conUTF7 = 2;
conUTF8 = 3;
conUTF16BigEndian = 4;
conUTF16LittleEndian = 5;
conUTF32BigEndian = 6;
conUTF32LittleEndian = 7;
conUTFEBCDIC = 8; // Format auf IBM-Großrechnern
conSCSU = 9; // Standard Compression Scheme for Unicode
conBOCU1 = 10; // Binary Ordered Compression for Unicode
conGB18030 = 11; // chinesische Zeichenkodierungsstandard (GB 18030)
...
function IsUnicode(const conStrQuellDateiname: string): integer;
var
txtQuelldatei: file of char;
chrZeichen: char;
intI: integer = 0;
strBOM: string = '';
begin
Result := conNoUnicode;
AssignFile(txtQuelldatei, UTF8ToSys(conStrQuellDateiname));
Reset(txtQuelldatei);
// Prüft auf Dateiende und liest die Zeichen für die BOM ein
while not EOF(txtQuelldatei) or (intI < 5) do
begin
intI := intI + 1;
Read(txtQuelldatei, chrZeichen);
strBOM := strBOM + chrZeichen;
end;
closefile(txtQuelldatei);
if Copy(strBOM, 1, 3) = #$F7#$64#$4C then
Result := conUTF1
else if Copy(strBOM, 1, 4) = #$2B#$2F#$76#$38 then
Result := conUTF7
else if Copy(strBOM, 1, 4) = #$2B#$2F#$76#$39 then
Result := conUTF7
else if Copy(strBOM, 1, 4) = #$2B#$2F#$76#$2B then
Result := conUTF7
else if Copy(strBOM, 1, 4) = #$2B#$2F#$76#$2F then
Result := conUTF7
else if Copy(strBOM, 1, 3) = #$EF#$BB#$BF then
Result := conUTF8
else if Copy(strBOM, 1, 2) = #$FE#$FF then
Result := conUTF16BigEndian
else if Copy(strBOM, 1, 2) = #$FF#$FE then
Result := conUTF16LittleEndian
else if strBOM = #$00#$00#$FE#$FF then
Result := conUTF32BigEndian
else if strBOM = #$FF#$FE#$00#$00 then
Result := conUTF32LittleEndian
else if strBOM = #$DD#$73#$66#$73 then
Result := conUTFEBCDIC
else if Copy(strBOM, 1, 3) = #$0E#$FE#$FF then
Result := conSCSU
else if Copy(strBOM, 1, 3) = #$FB#$EE#$28 then
Result := conBOCU1
else if strBOM = #$FB#$EE#$28#$FF then
Result := conBOCU1
else if strBOM = #$84#$31#$59#$33 then
Result := conGB18030
else
Result := conNoUnicode;
end;Aufruf unter Windows:
...
case IsUnicode('E:\Test.txt') of
...
...Aufruf unter Linux:
...
case IsUnicode('/home/user/Test.txt') of
...
...From the Free Pascal wiki, page "isUnicode/de", as it stood on 2020-02-18 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.
Talk about this page
Nobody has opened a bench for this page yet. Sign in to open one.
