c - Linux,field_buffer不提供UTF-8字符串

标签 c arrays linux string utf-8

在 Linux 的 C 程序中,使用 ncurseswform,我需要读取存储在 field 中的字符串,并支持UTF-8 字符。当仅使用 ASCII 时,非常简单,因为字符串存储为 char 数组:

char *dest;
...
dest = field_buffer(field[0], 0);

如果我尝试使用此代码在字段中键入 UTF-8 和非 ASCII 字符,则该字符不会出现并且不会被处理。在 this对于 UTF-8 的回答,建议使用 ncursesw。但是用下面的代码(写在 this guide 后面)

#define _XOPEN_SOURCE_EXTENDED
#include <ncursesw/form.h>
#include <locale.h>

int main()
{
        ...
        setlocale(LC_ALL, "");
        ...
        initscr();


        wchar_t *dest;
        ...
        dest = field_buffer(field[0], 0);
}

编译器产生错误:

warning: assignment from incompatible pointer type [enabled by default]
  dest = field_buffer(field[0], 0);
            ^

如何从字段中获取wchar_t数组? ncursesw 使用 get_wch 而不是 getch,那么它使用哪个函数而不是 field_buffer() 呢?我通过谷歌搜索找不到它。

最佳答案

程序在具有以下语言环境的系统中编译:

$ locale
LANG=it_IT.UTF-8
LANGUAGE=
LC_CTYPE="it_IT.UTF-8"
LC_NUMERIC="it_IT.UTF-8"
LC_TIME="it_IT.UTF-8"
LC_COLLATE="it_IT.UTF-8"
LC_MONETARY="it_IT.UTF-8"
LC_MESSAGES="it_IT.UTF-8"
LC_PAPER="it_IT.UTF-8"
LC_NAME="it_IT.UTF-8"
LC_ADDRESS="it_IT.UTF-8"
LC_TELEPHONE="it_IT.UTF-8"
LC_MEASUREMENT="it_IT.UTF-8"
LC_IDENTIFICATION="it_IT.UTF-8"
LC_ALL=

它默认支持并使用 UTF-8。对于这样的语言环境,当使用 ncursesw 环境时,C 程序应该能够将 UTF-8 字符保存到 char 数组中。 为了正确设置 ncursesw,遵循 mentioned guide 中的所有步骤非常重要。 。特别是,程序应该有标题

#define _XOPEN_SOURCE_EXTENDED
#include <ncursesw/form.h>
#include <stdio.h>
#include <locale.h>

程序应编译为

gcc -o executable_file source_file.c -lncursesw -lformw

并且该程序应包含

setlocale(LC_ALL, "");

之前 initscr();。满足所有这些条件后,字符串可以保存到普通的 char 数组中,就好像使用 ncurses 和 ASCII 代替 ncurseswUTF-8。正如 John Bollinger 在注释中所指出的,函数 field_buffer 只能返回 char *,因此使用任何其他数据类型(例如 wchar_t<)是没有用的。/.

关于c - Linux,field_buffer不提供UTF-8字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32888615/

相关文章:

javascript - 在 NodeJS CLI 应用程序中将参数传递给可执行文件

linux - 在 shell 脚本中并行调用函数

c - 等同于 main 中的 fseek 和 ftell

java - 如何有效地在坐标列表中搜索

c - #define 使用结构化指针中的成员

javascript - 使用 javascript 循环读取 JSON 数字数组

javascript - 按键值过滤和分组

c - longjmp 是如何工作的?

c - 如何处理来自 GCC 的 -Wconversion 警告?

CUDA:具有共享内存和非 block 大小倍数的矩阵大小的平铺矩阵-矩阵乘法