gpt4 book ai didi

c - setlocale(LC_CTYPE, NULL) 可能返回哪些值?

转载 作者:行者123 更新时间:2023-11-30 16:10:34 24 4
gpt4 key购买 nike

我需要从命令行读取数据并以 UTF-8 存储数据。为此,我的方法是通过检索当前区域设置来确定哪个字符集正在使用命令行 shell。 (当然,如果您看到更好的方法,请分享您的想法!)

尝试检测事件区域设置的 LC_CTYPE 值时应该预期什么值?

我正在使用下面的函数,它期望获得像“POSIX”或“C”这样的字符串,或者像“en_US.UTF”这样的字符串-8'。

有谁知道是否还有其他可能的情况(即可能的值)?

(我关心的是确保我处理所有案件)

/* Retrieve the current charset using setlocale function.
@return Returned value is a string holding the name of the current charset. On error, function returns NULL.
*/
char* get_charset() {
// read environment locale for LC_CTYPE category
setlocale(LC_CTYPE, "");
char* locale = setlocale(LC_CTYPE, NULL);
if (strstr(locale, ".") != NULL) {
// return codeset (last block of chars preceeded by a dot)
return strrchr(locale, '.')+1;
}
return locale;
}

最佳答案

实际上,POSIX 定义了 "Portable character set"它是 ASCII 的子集,并且应该是任何符合标准的字符集的一部分。

对于setlocale()函数,official GNU documentation指出当 XPG syntax不被平台(即操作系统)使用,“C”是后备值,表示“POSIX 兼容”。
此外,返回值是一个字符指针(char*),因此结果应始终为字符串或NULL

所以,以下是问题的答案:

  1. 是的。给定的代码片段应涵盖所有情况。
  2. 如果想法是将结果存储为 UTF-8,则在 get_charset() 函数返回“C”的情况下不需要转换,因为这意味着使用的字符集与 ASCII 兼容,反过来,与 UTF-8 兼容

关于c - setlocale(LC_CTYPE, NULL) 可能返回哪些值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58866245/

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