是否可以更改 C 中的字符集编码?

Posted

技术标签:

【中文标题】是否可以更改 C 中的字符集编码?【英文标题】:Is it possible to change charset encoding in C? 【发布时间】:2019-10-21 16:36:50 【问题描述】:

我想让我的 C 程序打印来自其他字符集的符号,而不是默认的 ASCII 表。例如,我想从 ISO-8859 字符集中打印 [200,250] 范围内的字符。有可能吗?编译器应该如何设置? 提前感谢您的帮助!

【问题讨论】:

这个问题被标记为8859-2。那是你想要的8859 字符集吗?不是8859-1 也叫latin-1 不,我想显示来自不同字符集的字符,例如8859-2、WINDOWS-1250等 【参考方案1】:

设置您的语言环境并使用宽字符:

#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int main(void) 

    setlocale(LC_CTYPE, "");

    for (wchar_t c = 200; c < 250; c++)
    
        wprintf(L"%lc", c);
    
    wprintf(L"\n");
    return 0;

输出:

ÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øù

【讨论】:

打印 WINDOWS-1250 字符怎么样?我使用 debian 顺便说一句 啊,你在debian上,在这种情况下iconv可以帮忙 你能详细说明一下吗/ 当然,iconv 可以在不同的编码之间转换,即 utf8 到代码页 1250,反之亦然。另一种选择是使用所需的编码保存您的源文件 (.c),c 将为您的 I 假定此编码/O 操作 我的语言环境是 es_ES.UTF8【参考方案2】:

事实上,C 函数并不关心编码,所以如果你有这样的代码:

#include <stdio.h>

int main( void )

    printf( "Hällo Wörld\n" );
    return( 0 );

它将完全按照 C 源文件的编码打印出 'germanzied' "Hello World",与系统设置等无关。当然,如果您打印从文件中读取的字符串,情况也是如此。 如果你想重新编码字符串(比如从 UTF-8 到 ISO-8859)你必须手动或者搜索一个合适的库

【讨论】:

好吧,但我不想打印固定的字符字符串,我想从某个字符集的表中打印字符

以上是关于是否可以更改 C 中的字符集编码?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 UIWebView 中的字符编码?

C 中的宽字符输入/输出是不是总是从正确的(系统默认)编码读取/写入?

mysql 更改数据库字符编码的方法

批量更改文件编码格式 utf8到gb2312

如何对mysql中的字符进行编码转换

如何检查字符串是不是是UTF8编码