linux - Delphi/windows 和 Linux/Lazarus 共享字符以上#127

标签 linux windows delphi character-encoding lazarus

我正在维护一个项目,其中数据必须在 Windows 和 Linux 机器之间共享。 该程序于 2003 年在 DELPHI (Windows) 中开发 - 因此有很多遗留数据文件必须(至少可能)在未来由两个系统读取。

我已经将程序移植到 Lazarus,它在 Linux 上运行得很好。

但是数据(以专有格式)将字符串存储为#0-#255 中的通用 ascii 字符。在 Linux 机器上读取数据会导致出现大量“?”符号,而不是“ñ,äöüß...”等。

我试图解决的问题:

1.) 我像往常一样在 Windows 机器上读取数据。 2.) 我用修改后的版本保存了数据,它将使用 URLEncode() 对所有字符串进行编码 在节省。 3.) 我还修改了使用 URLDecode 读取数据的例程 4.) 我用修改后的版本保存了数据。 5.) 我在 linux 上编译了修改后的版本,并从 windows 机器上复制了数据。 6.) 我打开有问题的数据...并得到问号 (?) 而不是“ñ,äöüß...”等。

那么,实际的问题是:如何共享两个系统维护的数据并在(双方)编辑数据时保留这些字符? 提前致谢

最佳答案

128-255 之间的

8 位 Ansi 值是字符集特定的。无论在 Windows 上使用什么字符集来保存数据(假设您依赖于 Windows 默认编码,这取决于用户的区域设置),在 Linux 上加载数据时都必须使用相同的字符集,反之亦然。世界上使用的字符集有几十种,如果不是数百种,这使得 Ansi 数据的可移植性变得困难。这正是 Unicode 旨在解决的问题。您最好将数据保存在可移植的字符集中,例如 UTF-8,然后在加载/保存数据时执行与系统字符集的转换。

关于linux - Delphi/windows 和 Linux/Lazarus 共享字符以上#127,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26090374/

相关文章:

Linux shell : unexpected EOF while looking for matching `"'

c++ - "standard output stream"和 "standard output device"有什么区别?

java - 如何让Java运行可执行应用程序?

ios - 当我尝试在 iOS 上运行时,Delphi 说我缺少一个文件

web-services - 确保 Delphi 中 Web 服务中的功能是安全的

linux - 如何使用 bash 命令将文件中的多列合并为一列?

c++ - 这个程序的输出是什么?

python - 在混合调试中没有为 C++ 加载符号(来自 Python)

Windows Batch,调用另一个批处理时的循环和文件属性

Delphi Mocks - 验证重载方法从未被调用