[英]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.