问题标签 [widechar]
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.
c - 将参数传递给 CreateProcess() 在 C 中不起作用
我正在尝试创建一个允许用户输入“ping”命令并使用 CreateProcess() 根据用户输入执行命令的 shell。在处理变量时,我遇到了让 ping 命令工作的问题。例如,只要我在字符串前面有 L,下面的代码就可以正常工作。但是,字符串必须由用户输入给出,所以经过一些研究后,我遇到了可能以 wchar_t 变量的形式替换 L 转换。
如果我进行此更改,它将停止工作(控制台崩溃,无输出)。
我尝试在 CreateProcess() 参数和外部强制转换不同类型的变量。我不知道还能做什么。如何让用户 scanf() 进入一个变量,该变量将用作创建进程的参数?
c++11 - C++ 11:将 int 添加到 wchar_t
我天真地向 wchar_t 添加了一个 int 导致 Visual Studio 2013 警告。
warning C4244: 'argument' : conversion from 'int' to 'wchar_t', possible loss of data
因此错误涉及到 4 字节 int 被隐式转换为 2 字节 wchar_t。很公平。
执行此操作的 C++ 11 标准安全方式是什么?我想知道跨平台的影响、代码点的正确性和可读性,比如:L'A' + (wchar_t)1
或L'A' + \U1
其他。我的编码选项有哪些?
编辑 T+2:我向一个黑客小组提出了这个问题。不出所料,没有人正确。在招聘 C/C++ Unicode 程序员时,每个人都同意这是一个很好的面试问题,因为它非常简洁,值得深入讨论。
c++ - fgetws 无法从 FILE* 获取确切的宽字符字符串
我正在使用 fgetws 从文件中逐行获取一些字符串。我拥有的文件来自一个 popen 命令。这是代码片段:
当我得到的字符串 currentAppPath 具有宽字符字符串时,我得到的 appPath 没有预期的字符串。例如,如果我从 FILE 获得的字符串是10teciêênks
我的 appPath 变量,则将具有10tecieÌeÌnks
.
c - wprintf: %p with NULL pointer
As I was writing a unit test, I stumbled upon some odd behavior from glibc
, regarding "%p"
and the NULL
pointer.
If I have a line such as printf("NULL pointer is %p\n", NULL);
, then I see NULL pointer is (nil)
printed to the screen, as I expected.
If I instead use the wide-character version: wprintf(L"NULL pointer is %p\n", NULL);
, then it prints out NULL pointer is (
, and stops at the opening parenthesis. If I print a non-NULL
pointer, it prints that pointer, both normal and wide-character versions. Is this a known bug of glibc
, or am I just missing something?
NB: I realize that the C standard says that pointers with %p
are converted in an implementation-defined manner; it just seems unusual to just print (
for a NULL
pointer.
c++ - 任何 C 或 C++ 编译器是否有理由不将 wctrans_t 和 wctype_t 定义为 wchar_t 类型?
实际上,我正在比较编程语言之间的数据类型,这是我在阅读 C 和 C++ 标准时遇到的问题。
引自 C11,
wctrans_t
是一种标量类型,可以保存表示特定于语言环境的字符映射的值
wctype_t
是一种标量类型,可以保存表示特定于语言环境的字符分类的值
短语a scalar type表示C11 不限制wctrans_t
并且wctype_t
是特定的标量类型。
我的 MinGW 的 GCC 4.8 实现了wctrans_t
andwctype_t
作为 typedef wchar_t
,我认为任何其他 C 编译器都没有理由不按原样定义它们。
有人可以证明其他情况,或者提供发生这种情况的可能性吗?
c++ - std::string 以 UTF-8 原生编码,但 char 不能保存 utf 字符?
在阅读了std::wstring VS std::string之后,我的印象是对于Linux,我不需要担心使用该语言的任何宽字符工具。
*诸如:std::wifstream、std::wofstream、std::wstring、whar_t等。
当我仅将 std::strings 用于非 ascii 字符时,这似乎很好,但当我使用 chars 处理它们时则不然。
例如:我有一个文件,其中只有一个 unicode 复选标记。
我可以将其读入,将其打印到终端,然后将其输出到文件中。
但是,如果我使用 char 代替 std::string,则相同的程序不起作用:
终端中什么都没有出现(除了换行符)。
输出文件包含â
而不是复选标记字符。
由于 char 只有一个字节,我可以尝试使用 whar_t,但它仍然不起作用:
我还阅读了有关设置以下语言环境的信息,但似乎没有什么不同。
c++ - C ++ - 将定义的字符串转换为宽字符串(L前缀)
假设我已经定义了字符串:
但是,某些函数要求我的字符串具有 L 前缀(扩展格式)。
当然我可以再做一个宏
但这需要我每次更改两个字符串。是否可以在使用非宽宏时将其“投射”为宽?
c - 如何使用 JNI 打印宽字符
在JDK 1.7.0的32 位 Ubuntu机器上,我无法打印宽字符。
这是我的代码:
JNIFoo.java
foo.c
然后我正在执行以下命令:
以下是取决于用于执行程序的 JDK 的结果:
jdk1.6.0_45 /bin/java -Djava.library.path=/path/to/jni_test JNIFoo
使用 fWprintf
结束
jdk1.7.0 /bin/java -Djava.library.path=/path/to/jni_test JNIFoo
结束
jdk1.8.0_25 /bin/java -Djava.library.path=/path/to/jni_test JNIFoo
结束
如您所见,对于 JDK 1.7 和 JDK 1.8,fwprintf 无效!
所以我的问题是我缺少什么能够使用 JDK 1.7(和 1.8)使用宽字符?
注意:如果我调用fprintf而不是fwprintf,那么没有问题,一切都正确打印出来。
编辑
根据 James 的评论,我创建了一个 main.c 文件:
然后我像这样编译它:
并设置 LD_LIBRARY_PATH
它工作正常:
所以问题可能不是来自C。
注意:它在 64 位机器上正常工作。我在使用 linux Mint 32 位时遇到了类似的问题。
delphi - Ansichar 和 char 有什么区别?
我最近遇到了这种数据类型不匹配的问题。这是我以前从未见过的。我希望有人可以解释这些是什么以及它们有何不同。
我得到的错误是 F2063。[DCC 错误] E2010 不兼容的类型:“AnsiChar”和“Char”