Tag: 字符编码

如何在C中设置运行时字符集?

如何在Linux环境下用C编程语言设置运行时字符集? 例如,我想将其设置为iso8859-1,utf-8或ascii。

在c中添加2个字符的问题

我目前正在尝试在c中添加2个字符 char a = 127; char b = 127; char c = a + b; printf(“%d\n”, c); 打印出4294967278,我实际上遇到了问题,我将2个数字加在一起,结果的ASCII值大于127,这里发生了什么? 不是字符8位或256个可能的数字? 所以添加小于256的值应该不起作用?

是否可以在C程序中“强制”使用UTF-8?

通常当我希望我的程序使用UTF-8编码时,我会写setlocale (LC_ALL, “”); 。 但是今天我发现它只是设置定位到环境的默认语言环境,我不知道环境是否默认使用UTF-8。 我想知道有没有办法强制字符编码为UTF-8? 另外,有没有办法检查我的程序是否使用UTF-8?

LibXML内部和输出编码

我正在尝试用ISO-8859-1中的libxml2编写XML文件。 但是从文档中看来,对于我创建的每个文本节点,我都必须转换为UTF-8,这是libxml的内部编码。 然后,当调用xmlSaveFormatFileEnc()时,libxml将转换为目标编码并将encoding属性添加到文档中。 这个假设是否正确? 现在我的代码大致如下: xmlNode *root_element = NULL, *node4 = NULL; xmlDoc *doc = NULL; doc = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION); root_element = xmlNewDocNode(doc, NULL, BAD_CAST(“root”), NULL); char * input_str = getLatin1Data(); isolat1ToUTF8(utf8_str, &file_size, input_str, &inlen); node4 = xmlNewCDataBlock(doc, BAD_CAST list_content, xmlStrlen(BAD_CAST utf8_str)); xmlAddChild(root_element, node4); xmlSaveFormatFileEnc(“test_file.xml”, doc, “UTF-8”, 1); xmlFreeDoc(doc); xmlNode *root_element = NULL, *node4 = […]

为什么短*而不是char *为字符串? char *和unsigned char *之间的区别?

正如标题所说,我有两个问题。 编辑 :为了澄清,他们实际上并没有使用char和short ,他们确保它们是特定typedef的8位和16位。 然后将实际类型称为UInt8和UInt16 。 1.问题 iTunes SDK使用unsigned short* ,需要字符串 。 使用它而不是char* / unsigned char*什么好处? 如何将其转换为char* ,以及使用此类型时有何不同? 2.问题 我只看到char*当时必须存储一个字符串。 我什么时候应该使用unsigned char* ,或者它没有任何区别?

你如何获得系统在c / c ++中使用的编码类型?

在linux终端中,可以输入 locale charmap 为了看看你的系统使用什么样的字符编码,例如UTF-8。 我的问题是如何使用c / c ++来做到这一点。 (我正在使用linux) 编辑 :我试过用 nl_langinfo(CODESET) 但我得到ANSI_X3.4-1968而不是UTF-8(这是我在输入时得到的:locale charmap)。 我使用nl_langinfo()错了吗?

C中的重音/变音字符?

我刚刚学习了C并得到了一项任务,我们必须将纯文本转换为莫尔斯代码并返回。 (我大部分都熟悉Java,所以请遵守我使用的条款)。 为此,我有一个包含所有字母字符串的数组。 char *letters[] = { “.- “, “-… “, “-.-. “, “-.. “, “.”, “..-.” etc 我写了一个函数来返回所需字母的位置。 int letter_nr(unsigned char c) { return c-97; } 这是有效的,但是分配规范要求处理瑞典语的变形字母åäö。 瑞典语字母与最后用这三个字母的英语相同。 我尝试检查这些,如下: int letter_nr(unsigned char c) { if (c == ‘å’) return 26; if (c == ‘ä’) return 27; if (c == ‘ö’) return 28; return c-97; […]

为什么printf(“%c”,1)返回笑脸而不是编码char为1

这是我的代码 #include int x,y; int main( void ) { for ( x = 0; x < 10; x++, printf( "\n" ) ) for ( y = 0; y < 10; y++ ) printf( "%c", 1 ); return 0; } 它会回归笑脸。 我到处搜索笑脸的代码或1的代码,但我没有找到任何链接或任何解释为什么1的char值返回笑脸,当1的ascii代码是SOH时。 我研究了这个问题的答案,但我没有找到解释为什么会发生这种情况的答案。

使用m4将字符串转换为ASCII代码点

这应该是可能的,但由于我是m4的新手,我不知道如何去做,或者如何写一个算法来做到这一点(在m4中)。 编辑: 刚解决它,无论如何将来参考,我有一系列字符,它们需要被翻译成等效的ASCII码点,例如 ascii(-{COLON}-, -{:}-) => #define TKN_COLON 58

c读取非ASCII字符

我正在解析一个涉及æøå等字符的文件。 如果我们假设我已经存储了一行文本文件,如下所示 #define MAXLINESIZE 1024 char* buffer = malloc(MAXLINESIZE) … fgets(buffer,MAXLINESIZE,handle) … 如果我想计算一行中的字符数。 如果我尝试执行以下操作: char* p = buffer int count = 0; while (*p != ‘\n’) { if (isgraph(*p)) { count++; } p++; } 这忽略了任何æøå的发生 即:计算“aåeæioøu”将返回5而不是8 我是否需要以另一种方式阅读文件? 我不应该使用char*而是使用int*吗?