首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi/windows和Linux/Lazarus共享127号以上的字符

问Delphi/windows和Linux/Lazarus共享127号以上的字符
EN

Stack Overflow用户
提问于 2014-09-28 22:37:42
回答 3查看 549关注 0票数 2

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

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

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

我想要解决的问题是:

1.)我像往常一样在windows机器上读取数据。2.)我使用修改后的版本保存数据,在保存时使用URLEncode()对所有字符串进行编码。3.)我还修改了用URLDecode 4读取数据的例程。)我用修改后的版本保存了数据。5.)我在linux上编译了修改后的版本,并从windows机器上复制了数据。6.)我打开了相关的数据。有发问的痕迹(?)而不是“.”等。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-29 00:52:47

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

票数 4
EN

Stack Overflow用户

发布于 2014-09-29 09:23:27

考虑在所有的文本存储中使用UTF-8。

或者,如果您确信您的数据总是有相同的代码页,则可以使用从原始Windows代码页到UTF-8的转换,这是默认的Linux/Lazarus编码。

如果您希望应用程序文件格式是跨平台的,最好不要依赖任何专有的二进制布局。您刚刚发现了字符编码问题,但是您可能会遇到其他问题,比如二进制endianess。SQLite3是一个非常好的应用文件格式。它快速、可靠、跨平台、稳定、原子化.

票数 3
EN

Stack Overflow用户

发布于 2014-09-30 07:34:49

注意,Lazarus 总是需要用于GUI的utf8字符串。因此,即使在Windows上,如果没有适当的utf8卫生设施,这也是行不通的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26090374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档