Difference between revisions of "Utf16File To AnsiFile/de"
From Lazarus wiki
Jump to navigationJump to search (Created page with "{{Utf16File To AnsiFile}} <br> <br> Das Unterprogramm konvertiert eine UTF16-Datei in eine Ansi-Datei.<br> Die Methode funktioniert nur beim westeuropäischen Zeichensatz. And...") |
m |
||
Line 102: | Line 102: | ||
... | ... | ||
− | if funDekodiereUtf16DateiZuAnsiDatei(' | + | if funDekodiereUtf16DateiZuAnsiDatei('D:\Test_BE.txt', 'D:\Test_Ansi.txt') then |
... | ... | ||
Line 114: | Line 114: | ||
... | ... | ||
− | + | if funDekodiereUtf16DateiZuAnsiDatei('/home/user/Test_BE.txt', '/home/user/Test_Ansi.txt') then | |
+ | ... | ||
... | ... |
Revision as of 10:05, 14 September 2013
│
Deutsch (de) │
Das Unterprogramm konvertiert eine UTF16-Datei in eine Ansi-Datei.
Die Methode funktioniert nur beim westeuropäischen Zeichensatz. Andere Zeichensätze wie chinesisch, russisch, japanisch usw. benötigen eine sprachspezifische Umsetzungstabelle.
uses
FileUtil, ...;
...
function funDekodiereUtf16DateiZuAnsiDatei(
const conStrQuellDatei, conStrZielDatei: string): boolean;
// Diese Unterprogramm übersetzt eine Unicode-Datei mit BOM zu einer Ansi-Datei.
// Dieses Unterprogramm kann nur die Unicode-Dateien richtig umsetzen,
// die ausschliesslich Zeichen aus dem Westeuropäischen Zeichensatz 1252 enthalten
// in allen anderen Fällen, kommt nur Datenmüll heraus.
var
txtQuelldatei: file of char;
txtZieldatei: file of char;
chrZeichen: char;
strBOM: string = '';
blnBigEndian: boolean = False;
blnZweitesZeichen: boolean = False;
begin
Result := False;
assignfile(txtQuelldatei, UTF8ToSys(conStrQuellDatei));
assignfile(txtZieldatei, UTF8ToSys(conStrZielDatei));
Rewrite(txtZieldatei);
Reset(txtQuelldatei);
// Prüft, ob die Datei gross genug ist um überhaupt eine BOM zu haben
if FileSize(conStrQuellDatei) < 2 then
exit;
// Liest die ersten beiden Zeichen ein (nur diese beinhalten eine BOM)
Read(txtQuelldatei, chrZeichen);
strBOM := strBOM + chrZeichen;
Read(txtQuelldatei, chrZeichen);
strBOM := strBOM + chrZeichen;
// Prüft auf eine UTF16 BOM und bricht ab, wenn keine UTF16 BOM vorhanden ist
case strBOM of
// Big Endian
#$FE#$FF:
blnBigEndian := True;
// Little Endian
#$FF#$FE:
blnBigEndian := False
else
Exit
end;
// Übersetzt die Datei abhängig von der BOM von UTF16 (Unicode) nach Ansi
while not EOF(txtQuelldatei) do
begin
Read(txtQuelldatei, chrZeichen);
if blnBigEndian = True then
begin
if blnZweitesZeichen = True then
begin
Write(txtZieldatei, chrZeichen);
blnZweitesZeichen := False;
end
else
blnZweitesZeichen := True;
end;
if blnBigEndian = False then
begin
if blnZweitesZeichen = False then
begin
Write(txtZieldatei, chrZeichen);
blnZweitesZeichen := True;
end
else
blnZweitesZeichen := False;
end;
end;
CloseFile(txtQuelldatei);
CloseFile(txtZieldatei);
Result := True;
end;
Aufruf unter Windows:
...
if funDekodiereUtf16DateiZuAnsiDatei('D:\Test_BE.txt', 'D:\Test_Ansi.txt') then
...
...
Aufruf unter Linux:
...
if funDekodiereUtf16DateiZuAnsiDatei('/home/user/Test_BE.txt', '/home/user/Test_Ansi.txt') then
...
...
--Olaf 10:04, 14 September 2013 (CEST)