【问题标题】:UTF-8 encoding in c [closed]c中的UTF-8编码[关闭]
【发布时间】:2013-08-27 19:38:51
【问题描述】:

UTF-8 编码是什么?我用谷歌搜索但无法理解它是什么。请用简单的语言和例子来说明。

接下来我需要用UTF-8 编码对一个字符串进行编码。我得到了openssl,但它只转换为base64 格式。

#include<stdio.h>

struct some
{
    char string[40];
};

int main() 
{
    string *s;
    char str[9];
    gets(str);
    strcpy(s,str);
    /*Now how to get emcoded form of "Hello" in UTF-8*/
    /*printf("encoded data");
    return 0;
}

这些字符串可在runtime 获得,所以不要对即将发生的事情做任何事情。编码后需要将它们存储在DB中。

我在SO 上检查了它,但在c 中找不到任何来源,它在.net java c# 中可用。我正在使用linux Redhat

【问题讨论】:

标签: c linux utf-8


【解决方案1】:

编码描述了哪些字节或字节序列对应于哪些字符。 ASCII 是最简单的编码。在 ASCII 中,单个字节值对应于单个字符。不幸的是,世界上有超过 255 个字符。 UTF-8 可能是最常见的编码格式,因为它与英文 ASCII 兼容,但也允许使用国际字符。如果你用 C 写一个标准的英文字符串,它已经是 UTF-8。 “你好” == “你好”

Joel 有一篇关于这个主题的精彩文章,名为:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

它很好地解释了 ASCII、unicode 和 UTF8 字符串编码。

在 UTF-8 中,从 0 到 127 的每个代码点都存储在一个字节中。仅有的 代码点 128 及以上使用 2、3 存储,实际上最多 4 个(不是 6,由 R 更正。) 字节。

【讨论】:

  • 所以如果我用 ASCII 隐藏它......我的工作就完成了吗?
  • @Krishna 它已经完成了。当你用 C 写出英文字符串时,它们是 ASCII 字符集,反过来又兼容 UTF-8
  • @justin... 实际上我是在运行时获取这些字符串,所以我不知道它们是什么?编码后我需要将它们存储在数据库中。我很天真,所以不知道该怎么做。
  • @Krishna 如果您从未知来源加载它们,那么编码是未知的,无需嗅探模式或某种元数据。你有理由认为在运行时加载的字符串不是 ASCII 或 UTF-8 吗?
  • @Justin... 实际上我没有...。我只是被要求为某些我无法存储在数据库中的字符(例如 URL)这样做...所以我们的想法是需要对它们进行编码,然后在需要时从数据库中获取数据并对其进行解码....
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 2016-09-22
  • 2011-06-17
  • 2011-10-30
相关资源
最近更新 更多