问题标签 [widestring]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
580 浏览

c++ - 将宽字符串或宽字符数组转换为简单字符数组的最简单方法?

我的变量在一个宽字符串的特定内部实现中,但我可以很容易地将它变成一个宽字符数组。问题是我需要将它提供给只接受字符数组的库函数。

所以我最终得到了这样的结果:

那么,有没有一种简单的方法,或者我应该逐个字符地手动完成?

0 投票
2 回答
1357 浏览

c - fwprintf 不输出宽字符

我想将宽字符输出到文件中,fwprintf但不这样做,即使它被描述为这样做。示例代码:

之后我的文件“wideTestFile.txt”正好包含 5 个字节:31 32 33 34 35根据我的十六进制转储实用程序。

我怀疑当前语言环境存在一些问题,可能会fwprintf调用 on fwprintf_l,它将语言环境作为附加参数。

我一直在阅读如何使用最后一次调用,但我无法理解我需要作为语言环境传递的内容。文档对此相当模糊(或者我可能无法理解)。

任何解释为什么fwprintf不像记录的那样表现?以及使用的任何示例fwprintf_l

非常感谢,

京东

这适用于 Mac OS X 10.8.2 下的 Xcode 4.5.1,目标是来自 Objective-C 代码的 iOS 6.0。但这些都不重要。

0 投票
3 回答
35771 浏览

c++ - C++ 中的 L 前缀究竟是什么?

我了解它的作用:将字符串文字指定为const wchar_t *(宽字符串)而不是const char *(普通旧字符),但它实际上是如何定义的?

它是某种宏吗?它是 GCC 编译器的运算符吗?它是什么?

0 投票
1 回答
1401 浏览

c++ - 模板 char/wchar_t、string/wstring、cout/wcout、regexp/wregex(或任何可能的解决方法)

我正在处理charwchar_t

我正在编写一个辅助字符串类,它将一些正则表达式(带有提升)添加到一些字符串,但我同时拥有stringwstring. 现在我有 2 个函数,每个函数都有重复的代码。

它有效,但我正在寻找一些优雅的方法(模板?一些 oop 魔术?函数指针?)来删除重复的代码。

0 投票
1 回答
2121 浏览

delphi - 如何在 Delphi 中对转义的宽字符串进行转义?

我的一些宽字符串包含用 转义的字符例如:宽字符串源看起来像:'   ' 转换后的结果必须是 ' '(3 个空格)。

函数应该看起来像

注意:1)我使用的是 Delphi 7。

2) 这个宽字符串是 SOAP 响应而不是 HTML 的一部分。

3) 通常,此方法应接受字母数字字符作为宽字符串的一部分:示例输入 :='be @' 结果 := 'be @'

0 投票
1 回答
1131 浏览

c++ - 如何在 C++ 中将单字节字符串转换为宽字符串?

我知道编码,并且输入字符串是 100% 单字节,没有像 utf 等花哨的编码。我想要的只是根据已知的编码将它转换为 wchar_t* 或 wstring。使用什么功能?btowc()然后循环?也许字符串对象有一些有用的东西。有很多示例,但所有示例都是针对“多字节”或带有 btowc() 的花哨循环,它们仅显示如何在屏幕上显示确实此功能正在工作的输出,我还没有看到任何严肃的示例如何处理这样的缓冲区情况下,宽字符总是比单个字符字符串大 2 倍吗?

0 投票
1 回答
379 浏览

c++ - 尝试初始化 wregex 对象时缩小 boost 的 regex_traits_defaults.hpp 中的转换警告

第一行编译正常。第二个也产生工作EXE,但另外我得到这个大错误:

代码 :

提升:http: //sourceforge.net/projects/boost/files/boost/1.52.0/boost_1_52_0.7z

编译器:http: //sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.7.2/32-bit/threads-posix/sjlj/x32-4.7.2-release-posix-sjlj-rev7。 7z

0 投票
5 回答
3036 浏览

c++ - 如何使用 wcout 显示 L"أَبْجَدِيَّة عَرَبِيَّة‎中文"?

我想使用 wcout 显示混有中文的阿拉伯语消息。

下面的代码是可以的:

但是,以下代码不起作用:

我认为在采用 unicode 之后应该弃用代码页的概念。

Q1。wout显示这样一个文本的机制是什么?

Q2。为什么 Windows 作为基于 unicode 的操作系统,不支持在其控制台窗口中输出 unicode 字符?

0 投票
2 回答
1828 浏览

delphi - Delphi 7调用DelphiXE2 dll获取损坏的宽字符串

我有一个 Delphi 7 应用程序,它需要调用一个对于可用的 SOAP 导入器来说太新的 SOAP API。我很满意 D7 调用 SOAP API 需要付出太多努力才值得。但我也有 Delphi XE2,它可以导入 SOAP 并非常愉快地调用它。所以我在 XE2 中编写了一个简单的 dll 包装器,它公开了soap接口的必要部分。我可以从 XE 程序中调用 dll。

在 Delphi7 中,我从 XE 中获取了 SOAP API 导入文件,去掉了 {$SCOPED_ENUMS ON} 定义和调用不可用 SOAP 包装器的初始化部分,并在整个过程中将字符串更改为宽字符串。编译。我正在使用启用了 ShareMM 的 FastMM 来进行字符串传递工作并避免进行所有 stdcall。

我尝试这样做的原因是,如果它有效,它将使 SOAP shim 非常易于编码和维护,因为 90% 的代码是由 XE2 SOAP 导入器生成的,这意味着当我们将 D7 应用程序移至现代 Delphi 代码将基本保持不变。

但是当我运行它时,我得到了奇怪的字符串(以及随之而来的访问冲突)。我有一些不使用 SOAP 代码的简单函数来使问题更加明显。

将 Delphi7 exe 中的宽字符串传递到 DelphiXE2 dll 中,字符串长度加倍(根据 Length() 函数),但没有匹配的数据转换。因此,D7 中的宽字符串“123”在 XE2 中变为“1234....”,其中 .... 是堆栈上碰巧出现的任何垃圾。被视为字节数组都具有预期的半零字节。

将宽字符串从 XE2 dll 传递回 D7 我得到了镜像效果 - 字符串长度减半并且字符串被简单地截断(“1234”变为“12”)。

我正在粘贴代码,因为我知道你会要求它。

在 Delphi XE2 中,我正在导出这些函数:

在德尔福 7 中:

我可以从任一端运行,使用 D7 可执行文件作为主机应用程序来调试 dll。在调试器中检查参数和返回值会得到上述结果。

烦人的是,如果我在 delphi7 中将导入声明为字符串,我会得到正确的长度但无效的数据。如图所示,当我尝试返回时,我得到了有效的数据、错误的长度和访问冲突。

将其全部设置为 stdcall 不会改变行为。

显而易见的解决方案是只编写简单的包装函数,以准确地公开我现在需要的功能。我可以这样做,但我更喜欢上述狡猾的方式。

0 投票
1 回答
1821 浏览

c++ - C++ 使用 delphi DLL

我无法使用在delphi中开发的dll的功能。我在类型转换方面遇到了一些困难。

这是我要调用 DLL 的函数:

我的 C++ 代码是这样的:

我无法使其工作的问题。我不知道哪种类型与 Delphi WideString 和 Cardinal 兼容。

谁来帮帮我

编辑:

这是我要调用 DLL 的函数:

修改后的代码是这样的: