Delphi 7 中宽字符串到字符串的转换

2024-03-15

我的应用程序是用 Delphi 7 编写的非 unicode 应用程序。

我想使用此函数将 unicode 字符串转换为 ANSI:

function convertU(ws : widestring) : string;
begin
  result := string(ws);
end;

我还使用此代码来设置要转换的正确代码页。

initialization
  SetThreadLocale(GetSystemDefaultLCID);
  GetFormatSettings;

它在 VCL 主线程中工作得很好,但在 TThread 中则不然, 我得到一些问号'?'作为函数的结果convertU.

为什么不在 TThread 中?


AFAIK SetThreadLocale不会更改当前系统代码页,因此不会影响widestring to ansistringDelphi 7 中的转换,依赖于GetACPAPI调用,即系统代码页。

系统代码页设置为在 Windows 7 的控制面板中,然后选择区域语言/管理选项卡/非 Unicode 应用程序的代码页。这需要重新启动系统。

Delphi 7 使用此系统代码页,为所有转换 API 调用提供 0。如此风流SetThreadLocale不会影响widestring to ansistringDelphi 7 中的转换。它将更改区域设置(例如日期/时间和货币格式),而不是系统用于其 Ansi Unicode 转换的代码页。

新版本的 Delphi 有一个SetMultiByteConversionCodePage()函数,能够设置所有代码页使用AnsiString处理。

但是 API 调用(即所有....A()功能于Windows.pas其映射为...()在 Delphi 7 中)将使用此系统代码页。所以你必须打电话给...W()如果您想处理另一个代码页,则在转换为 Unicode 后使用宽 API。也就是说,Delphi 7 VCL 仅适用于系统代码页,而不适用于由SetThreadLocale.

在Delphi 7下,我的建议是:

  • Use WideString无处不在,以及特定的“广泛”API 调用 - Delphi 7 有几组组件可以处理WideString;
  • 使用您自己的类型和专用字符集,但在使用 VCL/RTL 或“Ansi” API 调用之前您需要显式转换 - 例如MyString = type AnsiString(这就是我们在 mORMot 中所做的,通过定义一个自定义RawUTF8内部 UTF-8 进程的类型)。

Delphi 2009 及更高版本可以更好地处理此问题,因为您可以为每个AnsiString类型,并正确处理与 Unicode 的转换,以用于 API 调用或 VCL 进程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi 7 中宽字符串到字符串的转换 的相关文章

  • 如何仅在调试模式下激活 ReportMemoryLeaksOnShutdown?

    我需要激活ReportMemoryLeaksOnShutdown报告应用程序内存泄漏的功能 但仅限于调试模式 当 Delphi IDE 运行时 我怎样才能做到这一点 如果您的意思是使用调试构建配置 D2007 编译的 调试模式 则您将定义
  • .Net 中包含希伯来字母和数字的 Unicode 字符串

    尝试创建包含希伯来字母和数字的字符串时出现奇怪的行为 数字将始终显示在字母的左侧 例如 string A u05E9 A Hebrew letter string B 23 string AB A B textBlock1 Text AB
  • 在 JButton 上显示 Unicode 字符

    我正在尝试显示这个 Unicode uD83D on a JButton文本 但当我编译时 它只显示未知字符的平方 托马斯给出了一个很好的答案 但请注意 为了避免猜测哪些已安装的字体支持字符或字符串 我们可以迭代可用的字体并使用canDis
  • Scala 中使用转义特殊字符解码字符串问题

    我有一个多行 JSON 文件 其中包含编码为十六进制的特殊字符的记录 以下是单个 JSON 记录的示例 x22value x22 x22 xC4 xB1arines Bint xC4 xB1 xC3 xA7 Ramu xC3 xA7lar
  • 在运行时按需更改组件类

    我的问题与这里的想法类似 替换delphi中的组件类 https stackoverflow com q 4685863 937125 但我需要改变一个specific按需组件类 这是一些伪演示代码 unit Unit1 TForm1 cl
  • Firemonkey 编辑/组合自动完成/打字时自动建议

    实施方式是什么Autocomplete or Autosuggest适用于 Windows Android 平台以及 MacOS 和 iOS 的 Delphi Firemonkey Example 当用户在 Google 搜索框中输入文本时
  • 检测日语字符输入和“Romajis”(ASCII)

    我希望能够检测到用户何时 输入日语字符 汉字或假名 输入罗马字符 仅限 目前我正在使用这样的 ASCII 范围 C 语法 string searchKeyWord Console ReadLine var romajis from c in
  • 我可以让我的 Delphi 应用程序在特定时间(例如上午 12:00)启动,而不运行应用程序吗?

    我看到一个已安装的应用程序 它从供应商的网站提供一些 XML 数据并将其显示在主窗体窗口中 我想这很简单 但我注意到 即使我关闭系统托盘中的应用程序 明天早上 上午 12 00 正好 它也会再次弹出 这太酷了 我不确定它是用 Delphi
  • 如何根据输入的内容过滤组合框的内容?

    我们有一个包含 100 多个项目的组合框 当我们在组合框中输入字符时 我们想要过滤掉项目 例如 如果我们输入 ac 并单击下拉选项 那么我们希望它仅显示以 ac 开头的项目 我怎样才能做到这一点 也许您会更喜欢使用操作系统内置的自动完成功能
  • Async InputQuery 不处理“取消”按钮

    我正在使用一个简单的调用TDialogServiceAsync InputQuery 使用单个输入 它只是忽略了Cancel按钮和窗口的X关闭按钮 But the Ok按钮工作正常 这是我的代码 uses FMX DialogService
  • 如何在 JavaScript 中将本地化日期转换为标准日期?

    我正在编写一段 JavaScript 代码来对包含日期 包含本地化日期 和其他字段的数据表进行排序 例如 lunes 29 de agosto de 2011 field1 field2 lunes 28 de agosto de 2011
  • Delphi - 在修复 VCL 错误时,单元 x 是用不同版本的 x 编译的

    我正在使用 Delphi XE6 并在我的项目中使用 Datasnap 和 JSON 我想纠正 VCL 单元 System JSON pas 在 TJSONString ToString 函数中 中的一个错误 它应该转义反斜杠字符和引号 为
  • iOS 7 故事板本地化与属性标签

    我正在使用 ibtool 从我的所有语言的基本情节提要中生成字符串文件 出于某种原因 ibtool 没有提取UILabel风格为 attributed 我没有这些标签的键 值对 有人知道为什么吗 我最终得出的结论是 使用 ibtool 无法
  • 为什么我们从 MultiByte 转换为 WideChar?

    我习惯于处理 ASCII 字符串 但现在使用 UNICODE 我对一些术语感到非常困惑 什么是多字节字符以及什么是widechar有什么不同 多字节是指在内存中包含多个字节的字符吗 widechar只是一个数据类型来表示吗 为什么我们要从M
  • 处理 TShellListView 后代中的文件放置

    我正在尝试创建 TShellListView 的后代 它接受从 Windows 资源管理器中删除的文件 我想在组件定义中处理拖 放操作 而不必在任何使用该组件的应用程序中实现它 我找到了接受从 Windows 资源管理器中拖放的文件的示例
  • 具有 csOwnerDrawFixed 样式的组合框如何表现得像 csDropDown 样式?

    我正在使用一个组合框 http docwiki embarcadero com Libraries en Vcl StdCtrls TComboBoxstyle 属性设置为的组件csOwnerDrawFixed 我实现了绘图项一切工作正常
  • 石和磅的格式正确吗?

    我有一个图表 用于显示重量 以英石和磅 lbs 为单位 该图表由记录中的数据填充 对于权重 数据类型为 Double 记录数据是在运行时编辑的 我需要知道一种正确格式化输入数据的方法 为了更好地理解 首先看一下这些示例值 它们表示为石和磅
  • 为什么 {$ifopt FINITEFLOAT ON} 无法编译?

    我有这样的构造 ifopt FINITEFLOAT ON message FINITEFLOAT option ON else message FINITEFLOAT option OFF endif 在我的源代码中 它不会编译 这一定是一
  • Delphi AES 库 (Rijndael) 使用 KAT Vectors 进行测试

    对于这两个库 Delphi 加密概要 v 5 2 http code google com p delphidec TurboPower 密码箱 v 2 07 http lockbox seanbdurkin id au tiki list
  • 如何更改 TPageControl 上标签的方向?

    我是 Delphi 的新手 再次强调 我在 1994 年就使用过 Delphi 我现在有 Delphi 2009 Pro 来自Java 我发现对象继承非常晦涩 我的用户想要选项卡位于左侧的选项卡式页面 但是 TPageControl 不允许

随机推荐

  • 有没有办法将开关与 String.contains("") 集成?

    我需要检查 String 对象是否包含 各种子字符串 并根据结果执行不同的代码片段 目前我有一系列的 else if 如果可能的话 我想将其转换为开关 有没有办法做到这一点 现在 if SomeString contains someSub
  • 编写 SQL 查询以删除 Woocommerce 中的旧订单

    我想删除 Woocommerce 中的一些旧订单数据 仅保留最近 12 个月的订单数据 这是我用来删除所有订单的 SQL 查询 DELETE FROM wp woocommerce order itemmeta DELETE FROM wp
  • Android - 相机功能指南

    我正在使用 SDK CameraPreview 中的示例以及此站点中的示例http marakana com forums android android examples 39 html http marakana com forums
  • 获取当前位置(GPS/WiFi)

    我正在尝试使用它来获取我的位置 如下所示 LocationManager myLocationManager LocationManager getSystemService Context LOCATION SERVICE Criteri
  • 如何在打字稿中组织类型/接口声明?

    我对打字稿有点陌生 让我有点困惑的事情之一是类型 接口声明 我正在编写一个库 当前有一些类和更多类型 接口声明 我在大部分代码中使用这些类型 接口 最初我会将它们保留在一个文件中types文件夹 然后我会在需要的地方导入它们 现在我有一个m
  • 如何使用 Python 获取 Selenium WebDriver 中的用户代理信息

    我正在尝试获取我在 Selenium 中使用的实际用户代理 目前使用chromedriver 我找到了这个问题的Java版本 如何在 Selenium Web 驱动程序中获取 userAgent 信息 https stackoverflow
  • 如何获取相对和绝对光标位置?

    我怎样才能得到当前光标位置与SWT I need The absolute位置 仅相对于当前Display 位置relative到当前活动的Control 这获取光标位置相对于当前显示 import org eclipse swt widg
  • 如何在 Scala 的 Play!2 表单中包含图片类型?

    根据本指南 http www playframework org documentation 2 0 2 ScalaFileUpload 可以通过手写html表单来上传文件 我想将文件上传作为包含文本字段 例如姓名和电子邮件 的更大表单的一
  • 使用 ng-repeat 或 ng-options 时如何删除初始空白选项并选择

    有角度的新手 过滤通过dataservice返回的json数据 过滤是通过dropdown完成的 我想做的是结合以下几点 我想删除通过 Angular 返回的初始空白值 我还想让它预先选择一个默认值 该值不是 包含在我的数据对象中 在我的例
  • 在 Swift 2.0 中更改 NSView 的背景颜色

    我正在尝试更改 NSView 的背景颜色 并尝试了中概述的解决方案之一这个答案 https stackoverflow com questions 26553444 swift nsviewcontroller background col
  • Zookeeper:主机名解析失败

    我在 OpenShift Kubernetes 环境中运行 Zookeeper 我已将 Zookeeper 设置为StatefulSet为了可靠地保存配置数据 我在我的配置中配置了三台服务器zoo cfg通过主机名 但在启动时 主机名解析失
  • Base64编码中为什么要使用padding? [复制]

    这个问题在这里已经有答案了 可能的重复 如果输入长度不能被3整除 为什么base64编码需要填充 https stackoverflow com questions 4080988 why does base64 encoding requ
  • 为什么用户登录后看不到动画?

    我创建了一个自定义 LaunchSreen 当用户未登录时它运行良好 但如果他登录了 我们就看不到动画 视图会直接转到主视图 并且不等待动画完成 你知道为什么吗 import SwiftUI struct LaunchScreen View
  • 在 Google 地图片段中显示当前位置

    我目前正在开发一个带有 Google 地图的片段 一旦用户访问该片段 他的地图应该缩放并聚焦于他的位置 但是 它显示世界地图而不是附近位置 靠近用户 SuppressWarnings unused public class Deferred
  • 数据断点是如何创建的?

    我只是想知道如何数据断点 又名观察点 创建了吗 我知道常见的断点是使用 x86 上的一些特殊 INT3 指令创建的 我想你可以创建software通过定期扫描内存来观察点 但是从编写带有硬件断点的自己的调试器的角度来看 我在Windows
  • 为什么要使用 pytest 工厂作为固定装置而不是工厂函数?

    In the py test 文档 https docs pytest org en latest fixture html factories as fixtures它描述了将工厂方法声明为固定装置 如下所示 pytest fixture
  • 停止多线程 Windows 服务

    我在 Net 3 5 中有一个多线程 Windows 服务 当创建多个线程时 我在正确停止该服务时遇到了一些麻烦 该服务过去只创建一个线程来完成所有工作 我只是将其更改为多线程 它工作得很好 但是当服务停止时 如果有多个线程正在执行 它将挂
  • 如何使用命令行将所有 .pdf 文件名打印到输出文件?

    这在 Linux 中似乎很容易 但我正在尝试打印以下名称 pdf目录及其子目录中的文件到输出文件 我在 Windows 机器上安装了 Perl 有什么简单的方法可以做到这一点 和Linux没多大区别 dir pdf gt fileyouwa
  • ./node_modules/css-loader 中出现错误?:ENOENT:没有这样的文件或目录 node_modules/node-sass/vendor

    我试图在 Windows 10 中运行一个 Angular 项目 这与我在 Ubuntu 中做的项目是同一个项目 当我克隆存储库并安装所有节点包时 我遇到了此错误 错误于 node modules css loader sourceMap
  • Delphi 7 中宽字符串到字符串的转换

    我的应用程序是用 Delphi 7 编写的非 unicode 应用程序 我想使用此函数将 unicode 字符串转换为 ANSI function convertU ws widestring string begin result str