繁体   English   中英

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

[英]Why readline() from readline library don't accept UNICODE? ANSI C language

我编写了简单的应用程序:

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

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

所有这些都适用于Linux,BSD系列以及其他类似Unix的系统。 Windows有其独特的一套怪癖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM