gpt4 book ai didi

delphi - 使用delphi 2010替换UTF-8文件中的unicode字符

转载 作者:行者123 更新时间:2023-12-02 04:36:09 34 4
gpt4 key购买 nike

我试图用字符(十进制值 65)替换 UTF-8 文件中的字符(十进制值 197)

我可以加载文件并将其放入字符串中(但可能不需要这样做)

SS := TStringStream.Create(ParamStr1, TEncoding.UTF8);
SS.LoadFromFile(ParamStr1);
//S:= SS.DataString;
//ShowMessage(S);

但是,如何将所有 197 替换为 65,并将其另存为 UTF-8?

 SS.SaveToFile(ParamStr2);
SS.Free;

-------------- 编辑 ----------------

reader:= TStreamReader.Create(ParamStr1, TEncoding.UTF8);
writer:= TStreamWriter.Create(ParamStr2, False, TEncoding.UTF8);

while not Reader.EndOfStream do
begin
S:= reader.ReadLine;
for I:= 1 to Length(S) do
begin
if Ord(S[I]) = 350 then
begin
Delete(S,I,1);
Insert('A',S,I);
end;
end;
writer.Write(S + #13#10);
end;

writer.Free;
reader.Free;

最佳答案

十进制 197是十六进制C5 ,和十进制 65是十六进制41 .

C5本身不是有效的 UTF-8 八位字节,但 41是。所以我必须假设您实际上指的是 Unicode 代码点 U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVEU+0041 LATIN CAPITAL LETTER A相反。

U+00C5以 UTF-8 编码为 C3 85 ,和U+0041编码为41 。要执行您所要求的操作,您必须解码 UTF-8,替换代码点,然后重新编码回 UTF-8。 StringReplace()就可以很好地工作,例如:

SS := TStringStream.Create('', TEncoding.UTF8);
SS.LoadFromFile(ParamStr1);

S := StringReplace(SS.DataString, 'Å', 'A', [rfReplaceAll]);

SS2 := TStringStream.Create(S, TEncoding.UTF8);
SS2.SaveToFile(ParamStr2);

SS2.Free;
SS.Free;

或者:

reader := TStreamReader.Create(ParamStr1, TEncoding.UTF8);
writer := TStreamWriter.Create(ParamStr2, False, TEncoding.UTF8);

while not Reader.EndOfStream do
begin
S := reader.ReadLine;
S := StringReplace(S, 'Å', 'A', [rfReplaceAll]);
writer.WriteLine(S);
end;

writer.Free;
reader.Free;

更新:根据其他评论,看来您实际上对 Unicode 代码点 U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE 并不感兴趣。 ,而是在U+015E LATIN CAPITAL LETTER S WITH CEDILLA中相反,它以 UTF-8 编码为 C5 9E 。如果这是真的,那么只需替换 ÅŞ调用StringReplace()时UTF-8数据解码后:

S := StringReplace(S, 'Ş', 'A', [rfReplaceAll]);

关于delphi - 使用delphi 2010替换UTF-8文件中的unicode字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13868914/

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