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

为什么readline库中的readline()不';不接受UNICODE?ANSI C语言,c,linux,unicode,readline,C,Linux,Unicode,Readline,我写了一个简单的应用程序: #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_inp

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

#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;
}
正在将区域设置更改为波兰语,但仍不起作用:

# 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=
仍无法使用以下配置文件:

# 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会话临时切换到任何语言环境,或者使用特定的语言环境名称作为
setlocale
的参数(确保安装了相关的语言环境)

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


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

你试过吗?@Felix Palmen是的,我试过了,但没有得到积极的结果。它对我很有效(在第一次调用
readline()
之前设置locale),
readline()
使用区域设置。可能您的系统没有正确配置语言环境?我在问题中添加了语言环境值。我有readline版本6.3。我刚刚完成了:)谢谢,我之前也尝试过波兰语言环境,但仍然不起作用。试着看看我添加了什么。@slaw看起来你没有安装/生成区域设置。使用
locale-a
列出已安装的区域设置。如果找不到所需内容,请查阅Linux发行版文档。此外,必须在程序开始时调用
setlocale
# 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=
#