【问题标题】:Delphi 2006 translate from/into French/Dutch/German with a single ansi codepageDelphi 2006 使用单个 ansi 代码页从/到法语/荷兰语/德语翻译
【发布时间】:2011-12-01 09:36:44
【问题描述】:

我需要使用 Delphi 2006(没有任何第三方单元/组件)从/到法语/荷兰语/德语进行一些翻译。

这 3 种语言的代码页为 1252。我们的数据库是 UTF-8 兼容的,所以此时我依赖于表中的所有值都是 UTF-8 的事实。我应该对这个假设有信心吗?这会很好用,或者我应该担心 UTF-8 -> 代码页 1252 的差异,如果有的话?我不明白 UTF-8 和代码页之间的区别(例如我知道前 127 个字节是相同的,而乞求第 128 个字节是不同的)。

其次,我需要对某些字段进行搜索。我可以依赖 D2006 中的 ANSIUpperCase 函数吗?还是我应该做一个自定义函数来处理每个特殊字符?

LE:数据以 UTF-8 格式存储。

提前致谢!

【问题讨论】:

  • 如果您每个问题都询问一个主题,我希望您的问题更好。除了你之外,这对全世界来说似乎毫无用处,因为你把这么多不相关的东西组合成一个问题。如果您分解问题,每个人都会受益。另外,由于您的数据库已经是 UTF8,我想知道您为什么要继续使用 ANSI delphi 版本? XE/XE2 是自然升级。只是一个想法。

标签: delphi utf-8 delphi-2006 codepages


【解决方案1】:
  1. 符合 UTF8 的数据库并不意味着数据实际上以 UTF8 存储。例如。在 Firebird(兼容 UTF8)中,您可以使用 ANSI 字符集声明表。
  2. 您需要将 UTF8 转换为 ANSI 1252,反之亦然。例如。使用UTF8EncodeUTF8Decode 例程。

【讨论】:

  • 我会澄清这个问题。数据以 UTF-8 存储
  • 在我解码 UTF-8 后,AnsiUpperCase 会给我很好的结果吗?还是我应该处理字符串?
  • 可以,转换成ANSI后,就可以正常使用ANSI字符串函数了。不要忘记将结果转换回 UTF8 以发布到数据库。
  • 请注意,UTF8Encode() 需要 WideString 作为输入,UTF8Decode() 返回 WideString 作为输出。所以真的,你必须在读取数据时从UTF8->UTF16->ANSI 开始,在写入数据时从ANSI->UTF16->UTF8 开始。你必须非常小心 UTF16->ANSIANSI->UTF16 的转换。如果您必须专门使用代码页 1252,则通过直接调用 MultiByteToWideChar()WideCharToMultiByte() 在代码中显式使用它。不要依赖 RTL 总是在所有机器上使用 CP1252。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 2021-09-24
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
相关资源
最近更新 更多