【发布时间】:2017-10-04 08:36:23
【问题描述】:
我正在使用 Delphi 6。
我想将葡萄牙语 UTF-8 编码的字符串解码为 WideString,但我发现它没有正确解码。
原文为"ANÁLISE8"。使用UTF8Decode()后,结果为"ANALISE8"。 "A" 顶部的符号消失。
代码如下:
var
f : textfile;
s : UTF8String;
w, test : WideString;
begin
while not eof(f) do
begin
readln(f,s);
w := UTF8Decode(s);
如何将葡萄牙语 UTF-8 字符串正确解码为 WideString?
【问题讨论】:
-
使用 MultiByteToWideChar
-
您的文件可能不是用 UTF-8 编写的。以 UTF-8 编写的文件通常在前面有 3 字节 byte-order-mark sequence,如果文件没有,则可以安全地假定它使用系统的默认 Ansi 代码页。在这种情况下,将数据存储在
UTF8String中不会 使 UTF-8... -
您是如何确定您的代码不起作用的。我敢打赌,您将 WideString 转换为 ANSI。
-
@StijnSanders:“以 UTF-8 编写的文件通常前面有 3 字节字节顺序标记序列” - 实际上,它们没有,因为Unicode 和 UTF-8 规范不鼓励人们将 BOM 与 UTF-8 编码文件一起使用,以向后兼容 ASCII 文本文件和不知道如何处理 BOM 的旧版应用程序。 可以 BOM 存在于 UTF-8 文件中吗?是的。 是否 BOM 存在于 UTF-8 文件中?通常不会,大多数时候。
-
奇怪。 我遇到的每个 UTF-8 文件都有一个BOM,我的尝试不这样做会导致麻烦......但我想每个人的里程可能会有所不同。
标签: delphi unicode utf-8 delphi-6