c - 如何在 C 编程中显示 UNICODE 符号
问题描述
我需要有关在 C 程序中显示国际象棋符号的帮助,该怎么做?我正在使用 Code Blocks 程序编写 c 代码并编译它 任何帮助表示赞赏
解决方案
最便携的方法是使用标准库中的宽字符输出函数。
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#define WIDE_ORIENTED 1
int main(void)
{
setlocale( LC_ALL, "" );
fwide( stdout, WIDE_ORIENTED );
fputws( L"♖♘♗♕♔♗♘♖\n", stdout );
return(EXIT_SUCCESS);
}
在 Windows 上,您可以将语言环境设置为".1200"
在控制台中使用 UTF-16le。由于 Microsoft 没有很好地遵循标准,您可能还需要调用_setmode(_fileno(stdout), _O_U16TEXT);
.
如果您想将 Unicode 字符串存储为 UTF-8,大多数操作系统都允许您将它们打印到控制台。在 Linux 上,这需要适当地设置语言环境。在 Windows 上,它更复杂。您希望通过以下方式将控制台置于 UTF-8 模式:
#include <fcntl.h>
#include <io.h>
#include <windows.h>
#define CP_UTF8 65001
void init(void)
{
SetConsoleOutputCP(CP_UTF8);
_setmode(_fileno(stdout), _O_U8TEXT);
}
这仍然不允许语言环境函数(例如isalpha()
)与 UTF-8 一起使用。您将需要使用另一个库来处理 UTF-8 数据,例如 ICU。
因此,一个输出 UTF-8 的跨平台程序应该#ifdef
用来检测它是否需要编译仅限 Windows 的初始化代码,或者使用一个框架来为你处理这个问题。
推荐阅读
- swift - SwiftUI 基于 HttpResponse 更改 TextBox 占位符
- windows - Windows 是否提供虚拟文件?
- python-2.7 - 在 Python 多处理中,当子进程干净地存在时,stdout 会发生什么?
- c# - 如何在不使用 Min() Max() 的情况下使用 LINQ 从列表中获取最大和最小的数字?
- java - 如何锁定 couchbase 数据库中的文档并处理 TemporaryLockFailureException
- c++ - 如何修复 LU 分解?
- sqlite - 相对于家庭或环境变量的 Sqlalchemy sqlite url
- rstudio - Rstudio Rmarkdown编织到多个pdf?
- postgresql - 如何在不先连接所有内容的情况下增量散列postgresql中的聚合结果
- http4k - 是否可以使用 http4k 流式传输长响应?