Difference between revisions of "Utf16File To AnsiFile/de"
From Lazarus wiki
Jump to navigationJump to searchm |
m (Fixed syntax highlighting; deleted category included in page template) |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{Utf16File To AnsiFile}} | {{Utf16File To AnsiFile}} | ||
− | + | ||
− | + | ||
− | Das Unterprogramm konvertiert eine UTF16-Datei in eine ANSI-Datei. | + | Zurück zur Seite [[code examples/de|Code Beispiele]]. |
− | Die Methode funktioniert nur beim westeuropäischen Zeichensatz. Andere Zeichensätze wie chinesisch, russisch, japanisch u.s.w. benötigen eine sprachspezifische Umsetzungstabelle. | + | |
− | + | ||
− | <syntaxhighlight> | + | 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 u.s.w. benötigen eine sprachspezifische Umsetzungstabelle. | ||
+ | |||
+ | <syntaxhighlight lang=pascal> | ||
uses | uses | ||
FileUtil, ...; | FileUtil, ...; | ||
Line 98: | Line 102: | ||
<br> | <br> | ||
Aufruf unter Windows: | Aufruf unter Windows: | ||
− | <syntaxhighlight> | + | |
+ | <syntaxhighlight lang=pascal> | ||
... | ... | ||
Line 108: | Line 113: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ||
Aufruf unter Linux: | Aufruf unter Linux: | ||
− | <syntaxhighlight> | + | |
+ | <syntaxhighlight lang=pascal> | ||
... | ... | ||
Line 120: | Line 126: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− |
Latest revision as of 09:27, 4 March 2020
│
Deutsch (de) │
Zurück zur Seite Code Beispiele.
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 u.s.w. 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
...
...