gpt4 book ai didi

delphi - 可以从 ansistring 中删除 unicode 或 UTF8 字符吗?

转载 作者:行者123 更新时间:2023-12-02 13:41:35 24 4
gpt4 key购买 nike

如果 ansistring 中存在 Unicode 字符或 UTF8 字符,是否可以从字符串中删除这些字符?在这种特殊情况下,ansiststring 包含 EXIF 参数。

编辑

读取字符串后,它显示为:版权所有 © 2013 The States of Guernsey(根西岛博物馆和画廊)

在一种情况下,版权符号©被编码为UTF-8序列(即0xc2和0xa9)。Delphi 7 和 Delphi 2010 将其显示为 ascii,显示“”(C2) 和“©”(A9),忽略它是一个 UTF8 序列。 Exif 标记和版权标记 (33432) 应该是简单的 ASCII,而不是 UTF8 或 unicode。

那么,如果 ansistring 包含一个或多个这些字符,可以将它们从字符串中删除还是必须手动编辑?

编辑2

尝试恢复我尝试过的 UTF8:

//从字符串中删除空终止符(imageen 单元的一部分)函数RemoveNull(sValue: string): string;开始 结果:=修剪(值); if (结果 <> '') 和 (结果[长度(结果)] = #0) 然后 SetLength(结果, 长度(结果) - 1); 结果:=修剪(结果);结束;

EXIF_Copyright:由ImageEn定义为AnsiString; utf8:UTF8字符串;

// EXIF_Copyright
// Shows copyright information
SetLength(utf8, Length(EXIF_Copyright)); // [DCC Error] iexEXIFRoutines.pas(911): E2026 Constant expression expected
Move(Pointer(EXIF_Copyright)^, Pointer(utf8)^, Length(EXIF_Copyright)));
_EXIF_Copyright: result := RemoveNull(EXIF_Copyright);

不幸的是,我对处理 UTF8 缺乏经验。

其中 EXIF_Copyright 是 ansistring;

但这不会编译...

最佳答案

最简单的方法是将 UTF-8 字符串读入 UTF8String 类型的变量,然后分配给另一个字符串变量。

如果您愿意,您可以分配给 AnsiString,但我不明白您为什么要这样做。如果您确实转换为 ANSI,则任何无法表示的字符都将转换为问号。如果您迫切希望去除非 ASCII 字符,请读入 UTF8String,转换为字符串,然后去除 > 127 个字符。

据我了解,该标准强制要求使用 ASCII,但现在 EXIF 文本通常使用 UTF-8 进行编码。

我建议您只需将文本读入 UTF8String 并保留在该位置即可。

您的库为您提供了一个实际上包含 UTF-8 文本的 AnsiString。所以你可以像这样简单地转换为UTF8String:

function ReinterpUTF8storedInAnsiString(const ansi: AnsiString): string;
var
utf8: UTF8String;
begin
SetLength(utf8, Length(ansi));
Move(Pointer(ansi)^, Pointer(utf8)^, Length(ansi));
Result := utf8;
end;

现在您将看到文件创建者希望您看到的文本。

关于delphi - 可以从 ansistring 中删除 unicode 或 UTF8 字符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16487131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com