【问题标题】:Getting the default RTL codepage in Lazarus在 Lazarus 中获取默认的 RTL 代码页
【发布时间】:2017-11-19 15:30:19
【问题描述】:

拉撒路Wiki状态

Lazarus(实际上是它的 LazUtils 包)利用了该 API 并将其更改为 UTF-8 (CP_UTF8)。这意味着 Windows 用户现在也使用 RTL 中的 UTF-8 字符串

在我们的跨平台和跨编译器代码中,我们希望检测这种特定情况。 GetACP() Windows API 函数仍然返回“1252”,Lazarus 中的 GetDefaultTextEncoding() 函数也是如此。但是文本(特别是 FindFirst() 函数返回的文件名)包含具有 UTF8 编码文件名的字符串,并且字符串(变量)的代码页也是 65001。

那么,我们如何确定 RTL 默认使用 UTF8 字符串?我花了几个小时试图从 Lazarus 源代码中弄清楚这一点,但可能我遗漏了一些东西......

我知道在许多情况下,我们需要检查每个特定字符串的代码页,但我对找出默认 RTL 代码页的方法很感兴趣,它在 Lazarus 中是 UTF8,但在 FPC/Windows 中是 Windows 定义的没有拉撒路。

【问题讨论】:

    标签: utf-8 lazarus freepascal


    【解决方案1】:

    事实证明,没有单一的代码页变量或函数。文件系统 API 调用的结果将转换为代码页,在 DefaultRTLFileSystemCodePage 变量中定义。唯一的问题是这个变量存在于源代码中并且应该在系统单位中,但编译器看不到它。

    【讨论】:

    • 他们应该在那里。但是 FPC 3.0.x+
    • @MarcovandeVoort 是的,我也这么认为,但无论出于何种原因,编译器都无法解析它们。 FPC 3.0.2 是我在开发系统上拥有的唯一版本(如果不是 3.0+,我一开始就不会默认使用 UTF8)。
    • 这里它适用于库存安装的 FPC 3.0.2/win32,只需“开始 writeln(defaultsystemcodepage)'; 结束。”程序
    猜你喜欢
    • 1970-01-01
    • 2014-08-14
    • 2016-06-08
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多