哪个C功能可以将À,É转换为降低à,è?

时间:2016-07-18 03:21:56

标签: c locale lowercase tolower

哪个C功能可以将À,É转换为降低à,è?

我尝试了tolower()和towlower(),但两者都不起作用。

2 个答案:

答案 0 :(得分:2)

您可以使用towlower功能:

/* towlower example */
#include <stdio.h>
#include <wctype.h>
#include <wchar.h>
#include <stddef.h>
#include <locale.h>

int main () {

    setlocale(LC_CTYPE, "");
    int i=0;
    wchar_t str[] = L"À TÉst String.\n";
    wchar_t c;
    while (str[i]) {
        c = str[i];
        putwchar (towlower(c));
        i++;
    }
    return 0;
}

输出是:

à tést string.
  

> A C program inherits its locale environment variables when it starts
> up. This happens automatically. However, these variables do not
> automatically control the locale used by the library functions,
> because ANSI C says that all programs start by default in the standard
> `C' locale. To use the locales specified by the environment, you must
> call setlocale. Call it as follows:
>
> setlocale (LC_ALL, "");

<强> “”     空名称表示根据环境变量选择区域设置。

答案 1 :(得分:1)

您在此处遇到的实际问题*(尽管有上述&#34;答案&#34;),您有一个 Unicode 字符串。 *(或者,至少,某种DBCS =&#34;双字节字符集。&#34;)

&#34; C&#34; 语言的标准功能是在更早,更简单的时间设计的#34;&# 34;其中唯一需要考虑的语言表示是ASCII,其中指定了#34;需要表示的每个字符&#34;成为一组127个可能的值。这张照片中的无处是任何&#34;变音符号&#34;比如这些。在那些简单的时间里,&#34; 1字节= 1个字符。&#34;

为了代表&#34;真正的人(!) - 语言字符,&#34;有必要采用一种更加灵活的编码格式,可以将1到4个字节的任何内容分配给单个&#34;字符。&#34; (并且,请注意,关于&#34;以及如何做到这一点的共识#34;并非在一夜之间发生!)无论如何,&#34;原创&#34;您现在使用的库例程不是&#34; Unicode识别的。&#34; (它们从来没有被设计过,现在它们不能被改装......)相反,必须使用替代功能。

这是一个很好的外部网页,可以很好地总结使用C和C ++时需要考虑的各种问题:

http://www.cprogramming.com/tutorial/unicode.html

--- 编辑: 当我说,&#34;关于如何做到这一点的共识并非一蹴而就,&#34;我的意见旨在产生潜在的深远影响(!)。 &#34;为什么有必要,即使在今天,说"encoding=UTF-8"这就是原因。 &#34;对如何解释多国字节序列&#39;&#34; 的单一解释从未发展过,而且&#34; C&# 34;语言,特别是,&#34;把它放在下巴。&#34;在今天的C&#34; C&#34;中有超过一套完整的图书馆功能。您可能需要使用的运行时,以便正确处理您的数据。