【发布时间】:2012-12-13 21:38:27
【问题描述】:
我正在尝试用字符(十进制值 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;
【问题讨论】:
-
UTF-8 是一个字节长度,因此除非是代理对,否则不可能有十进制值 300,在这种情况下,最好讨论代表字符的代码点或单个字节。无论如何,您要完成什么,因为它可能与您的other question 有关
-
这些都没有任何意义。这个问题或您的其他问题。您在问什么是XY question。我敦促你告诉我们背后的故事。说出根本问题。让我们提出一个解决方案。您提出的解决方案听起来很弱。
-
普通的旧
StringReplace有什么问题? -
转成字符串,也就是UTF16,使用StringReplace,然后再保存为UTF8或者ASCII。
-
@JakeSnake:字节八位字节序列
C5 9E(dec 197 158)是 UTF-8 编码的ŞUnicode 字符,而不是Å字符。如果您只是将C5替换为41(12 月65 日),但不理会9E,则将Ş转换为无效的UTF-8 序列。我怀疑那是你真正想要的。如果你想用41替换C5 9E,你必须解码UTF-8数据,然后你可以使用StringReplace()将Ş字符替换为A字符,然后将结果编码回UTF -8.
标签: delphi delphi-2010