Atr*_*dex 4 c linux ascii non-ascii-characters
我有一个土耳其语单词列表。我需要比较它们的长度。但是由于一些土耳其语字符是非ASCII,我无法正确比较它们的长度。非 ASCII 土耳其语字符占 2 个字节。
例如:
#include <stdio.h>
#include <string.h>
int main()
{
char s1[] = "ab";
char s2[] = "ç?";
printf("%d\n", strlen(s1)); // it prints 2
printf("%d\n", strlen(s2)); // it prints 4
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的朋友说可以在 Windows 中使用以下代码行做到这一点:
system("chcp 1254");
Run Code Online (Sandbox Code Playgroud)
他说它将土耳其字符填充到扩展的 ASCII 表中。但是它在 Linux 中不起作用。
有没有办法在 Linux 中做到这一点?
现在是 2017 年,很快就是 2018 年。所以到处都使用UTF-8(在最近的 Linux 发行版中,UTF-8 是最常见的编码,对于大多数locale(7) -s,当然也是您系统的默认编码);当然,以 UTF-8 编码的Unicode字符可能有 1 到 6 个字节(因此某些 UTF-8 字符串中的 Unicode 字符数不是由 给出strlen)。考虑使用一些UTF-8库,比如libunistring(或其他库,例如在Glib 中)。
的chcp 1254事情是某些Windows具体的东西上UTF-8系统无关。所以忘记它吧。
如果您编写 GUI 应用程序,请使用诸如GTK或Qt 之类的小部件工具包。它们都处理 Unicode 并且能够接受(或转换为 UTF-8)。请注意,即使只是简单地显示 Unicode(例如某些 UTF-8 或UTF-16字符串)也不是微不足道的,因为一个字符串可以混合使用例如阿拉伯语、日语、西里尔语和英语单词(您需要以从左到右和从左到右的方式显示)从右到左的方向),所以最好找到一个库(或其他工具,例如支持 UTF-8 的终端模拟器)来做到这一点。
如果您碰巧得到某个文件,则需要知道它使用的编码(这只是您需要获取和遵循的一些约定)。在某些情况下,file(1)命令可能会帮助您猜测该编码,但您需要了解用于制作该文件的编码约定。如果它不是 UTF-8 编码,您可以转换它(前提是您知道源编码),也许使用iconv(1)命令。
| 归档时间: |
|
| 查看次数: |
553 次 |
| 最近记录: |