是否可以更改 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 中的字符集编码?的主要内容,如果未能解决你的问题,请参考以下文章