gpt4 book ai didi

c - 为什么 readline 库中的 readline() 不接受 UNICODE? ANSI C语言

转载 作者:太空宇宙 更新时间:2023-11-04 10:18:39 37 4
gpt4 key购买 nike

我写了一个简单的应用程序:

#include <stdio.h>
#include <stdlib.h>
#include <readline/readline.h>
#include <readline/history.h>

int main()
{
char *user_input;

while(user_input = readline("> ")) {
printf("%s\n", user_input);
free(user_input);
}
return 0;
}

当应用程序启动时,它应该接受用户输入,并且在换行符(回车键)之后应该打印我写的内容。

它适用于“a”、“b”等字符,但不适用于波兰语“ł”。此字符被编码并作为 unicode 发送。告诉我为什么?我可以做些什么来告诉 readline 使用 UNICODE 并正确显示多字节字符?

我的readline版本是6.3

我补充说我的区域设置是:

# locale
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

将区域设置更改为波兰语但仍然无法正常工作:

# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=pl_PL.utf8
LC_CTYPE="pl_PL.utf8"
LC_NUMERIC="pl_PL.utf8"
LC_TIME="pl_PL.utf8"
LC_COLLATE="pl_PL.utf8"
LC_MONETARY="pl_PL.utf8"
LC_MESSAGES="pl_PL.utf8"
LC_PAPER="pl_PL.utf8"
LC_NAME="pl_PL.utf8"
LC_ADDRESS="pl_PL.utf8"
LC_TELEPHONE="pl_PL.utf8"
LC_MEASUREMENT="pl_PL.utf8"
LC_IDENTIFICATION="pl_PL.utf8"
LC_ALL=

仍然无法使用下面的 conf:

# export LANG="en_us.utf-8"
# bash
# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_us.utf-8
LC_CTYPE="en_us.utf-8"
LC_NUMERIC="en_us.utf-8"
LC_TIME="en_us.utf-8"
LC_COLLATE="en_us.utf-8"
LC_MONETARY="en_us.utf-8"
LC_MESSAGES="en_us.utf-8"
LC_PAPER="en_us.utf-8"
LC_NAME="en_us.utf-8"
LC_ADDRESS="en_us.utf-8"
LC_TELEPHONE="en_us.utf-8"
LC_MEASUREMENT="en_us.utf-8"
LC_IDENTIFICATION="en_us.utf-8"
LC_ALL=
#

最佳答案

您正在使用不支持 Unicode 的 POSIX 语言环境。

您可以将整个用户帐户切换到 utf-8 语言环境之一(en_us.utf-8 是一种流行的语言环境)。请查阅您的操作系统文档以了解如何执行此操作。

您还可以适本地设置 LANG 环境变量以临时将 shell session 切换到任何语言环境,或使用特定语言环境名称作为 setlocale 的参数(确保已安装相关语言环境) .

请注意,您的终端模拟器可能会或可能不会正确显示 Unicode 字符,除非使用正确的区域设置。确保这一点的推荐方法是将您的用户帐户切换到 utf-8 语言环境。

这一切都适用于 Linux、BSD 系列,或许还有其他类 Unix 系统。 Windows 有其独特的一组怪癖。

关于c - 为什么 readline 库中的 readline() 不接受 UNICODE? ANSI C语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44879834/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com