gpt4 book ai didi

Delphi xe8 错误读取从 Delphi 7 版本创建的文本文件,反之亦然

转载 作者:行者123 更新时间:2023-12-03 19:11:39 26 4
gpt4 key购买 nike

我尝试将代码从 Delphi 7 转换为 delphi xe8,但我找不到以下情况的解决方案。

我们的旧应用程序创建了一个 txt 文件,第一行是这样的

±HEADER―ID°N1799―USER_ID°N1―PATH_NAME―R_DATABASE°TC:\DATA―R_SERVER°TTEST_SRV―R_COMPUTER°TMYPC―

Char(―) 是 chr(175)。

我们尝试使用 Delphi xe8 从我们的新应用程序中读取已经创建的文件,如下所示:

  StrData := TStringList.Create;
StrData.LoadFromFile(sFile);

StrData.Text 返回所需的文本,但 chr(175) 被替换为 chr(8213)。

为了继续,我做了以下事情:
  StrData.LoadFromFile(sFile,TEncoding.ANSI);  
StrData.Text := StringReplace(StrData.Text,Chr(8213),Chr(175),[rfReplaceAll]);

我无法解决的是相反的情况。

我必须从 Delphi xe8 创建该文件,因为它与从旧的 delphi 7 应用程序生成的文件完全相同。

一开始我使用了与我们相同的代码:
StrData.SavetoFile(sFile); //returns text but chr(175) is replaced with (?)

我也尝试了所有没有结果的编码。
StrData.SavetoFile(sFile,Ansi);//returns text but chr(175) is replaced with (?) etc.

将代码转换为 TStreamFile 或 textfile 时也会产生相同的结果。

base64 编码文件

老一-更正一(StrData.SavetoFile(sFile))//Delphi 7

wrFIRUFERVLigJVJRMKwTjE4NjbigJVSSUTCsE4zNjHigJVDU0lURV9JRMKwTjHigJVSU0lURV9JRMKwTjEwMeKAlVNTSVRFX0lEwrBOMeKAlVRSTl9EQVRFwrBENDIzODIuNjA2NzkzOTgxNeKAlVVTRVJfSUTCsE4x4oCVUEFUSF9OQU1FwrBUXFxkZWxwaGkyMDEycjJcQkVORUZJVF9URVNUXFBBX09GRklDRV9WU0xcVFJBTlNGRVJcRVhQT1JU4oCVRklMRV9OQU1FwrBUQU5BRDM2MU0udHh04oCVRklMRV9UWVBFwrBO4oCVUENLX1NFTkRFUsKwVEFkbWlu4oCVUENLX05PVEVTwrBU4oCVX1JWX0lEMcKwTuKAlVNWX0lEwrBO4oCVUlZfSUTCsE7igJVSREJfSUTCsE4xMeKAlVNEQl9JRMKwTjEx4oCVUENLX0NOWFTCsFQwMywxNSw3MiwwMOKAlUtFWUlEwrBUezczRDIwMDU3LTM3NTgtNDlDMi05NTlGLTA4QzYxMDY4NEZGNn3igJVGTF9UWVBFwrBOMuKAlUZMX1NUQVRVU8KwTjDigJVTVEFSVF9EVMKwRDQyMzgyLjYwNjQ5MzA1NTbigJVSX1NUQVJUX0RUwrBE4oCVUl9FTkRfRFTCsETigJVSX1VTRVLCsFTigJVSX1BBVEjCsFTigJVTSVpFX1BDS8KwTuKAlVNJWkVfREFUQcKwTuKAlVNJWkVfQVRDSMKwTuKAlVNJWkVfRE9DU8KwTuKAlURBVEVfSU7CsETigJVSX0RBVEFCQVNFwrBU4oCVUl9TRVJWRVLCsFTigJVSX0NPTVBVVEVSwrBU4oCV

StrData.SavetoFile(sFile,Tencoding.Ansi); & StrData.SavetoFile(sFile);//XE8

wrFIRUFERVI/SUTCsE4xODY3P1JJRMKwTjM2Mj9DU0lURV9JRMKwTjE/UlNJVEVfSUTCsE4xMDE/U1NJVEVfSUTCsE4xP1RSTl9EQVRFwrBENDIzODIuNzA3NzA4MzMzMz9VU0VSX0lEwrBOMT9QQVRIX05BTUXCsFRcXGRlbHBoaTIwMTJyMlxCRU5FRklUX1RFU1RcUEFfT0ZGSUNFX1ZTTFxUUkFOU0ZFUlxFWFBPUlQ/RklMRV9OQU1FwrBUQU5BRDM2Mk0udHh0P0ZJTEVfVFlQRcKwTj9QQ0tfU0VOREVSwrBUQWRtaW4/UENLX05PVEVTwrBOP19SVl9JRDHCsE4/U1ZfSUTCsE4/UlZfSUTCsE4/UkRCX0lEwrBOMTE/U0RCX0lEwrBOMTE/UENLX0NOWFTCsFQwMywxNSw3MiwwMD9LRVlJRMKwVHtGQzM1N0QyNC1EQjRBLTRBOUMtQkE3My0xQ0FBMEVFRDUzOUJ9P0ZMX1RZUEXCsE4yP0ZMX1NUQVRVU8KwTjA/U1RBUlRfRFTCsEQ0MjM4Mi43MDcyNjg1MTg1P1JfU1RBUlRfRFTCsEQ/Ul9FTkRfRFTCsEQ/Ul9VU0VSwrBUP1JfUEFUSMKwVD9TSVpFX1BDS8KwTj9TSVpFX0RBVEHCsE4/U0laRV9BVENIwrBOP1NJWkVfRE9DU8KwTj9EQVRFX0lOwrBEP1JfREFUQUJBU0XCsFQ/Ul9TRVJWRVLCsFQ/Ul9DT01QVVRFUsKwVD8 =

StrData.SavetoFile(sFile,Tencoding.UTF8);//XE8

wrFIRUFERVLCr0lEwrBOMTg3MMKvUklEwrBOMzY1wq9DU0lURV9JRMKwTjHCr1JTSVRFX0lEwrBOMTAxwq9TU0lURV9JRMKwTjHCr1RSTl9EQVRFwrBENDIzODIuNzIyODEyNcKvVVNFUl9JRMKwTjHCr1BBVEhfTkFNRcKwVFxcZGVscGhpMjAxMnIyXEJFTkVGSVRfVEVTVFxQQV9PRkZJQ0VfVlNMXFRSQU5TRkVSXEVYUE9SVMKvRklMRV9OQU1FwrBUQU5BRDM2NU0udHh0wq9GSUxFX1RZUEXCsE7Cr1BDS19TRU5ERVLCsFRBZG1pbsKvUENLX05PVEVTwrBOwq9fUlZfSUQxwrBOwq9TVl9JRMKwTsKvUlZfSUTCsE7Cr1JEQl9JRMKwTjExwq9TREJfSUTCsE4xMcKvUENLX0NOWFTCsFQwMywxNSw3MiwwMMKvS0VZSUTCsFR7ODE5REQ0NDQtQzEwQi00MTY1LUFEQjAtQkI2NDAyRjA3NUI4fcKvRkxfVFlQRcKwTjLCr0ZMX1NUQVRVU8KwTjDCr1NUQVJUX0RUwrBENDIzODIuNzIyNTIzMTQ4McKvUl9TVEFSVF9EVMKwRMKvUl9FTkRfRFTCsETCr1JfVVNFUsKwVMKvUl9QQVRIwrBUwq9TSVpFX1BDS8KwTsKvU0laRV9EQVRBwrBOwq9TSVpFX0FUQ0jCsE7Cr1NJWkVfRE9DU8KwTsKvREFURV9JTsKwRMKvUl9EQVRBQkFTRcKwVMKvUl9TRVJWRVLCsFTCr1JfQ09NUFVURVLCsFTCrw ==

有任何想法吗?

最佳答案

Delphi 7 程序保存的文件是 UTF-8 编码的。我解码了您提供的 base64 并在十六进制编辑器中查看它。它看起来像这样:

enter image description here

前两个字节是 C2 B1 .那是±的UTF-8编码。你可以在这里查看:https://mothereff.in/utf-8 .

使用LoadFromFile(..., TEncoding.UTF8)加载文件,SaveToFile(..., TEncoding.UTF8)保存它。这就是你需要做的。请注意,当您以这种方式保存时,文件中将包含一个 BOM。如果不希望这样做,则可以省略 BOM,如前所述。

请注意,您必须删除对 StringReplace 的调用。 .这会修改文本并且没有任何用处。您绝对不想替换 U+2015 ― 与 U+00AF ¯。

根据对此答案的评论,您似乎有一些 Delphi 7 代码产生了 UTF-8 编码文本,当由 Delphi XE8 执行时,这些代码的行为不正确。由于从 ANSI 到 UTF-16 的变化,这并不奇怪。您将需要重新访问此代码并对其进行适当调整。鉴于只有您拥有此代码,我们不可能说更多。

感觉就像您几乎是在随机尝试并希望快速修复一样。那是没有生产力的。只有清楚地了解 Unicode 和您的程序,您才能取得进步。你需要退后一步,放慢脚步,填补你的知识空白。

关于Delphi xe8 错误读取从 Delphi 7 版本创建的文本文件,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34768213/

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