AIX系统UNICODE转中文

fang3453126 2015-01-30 11:50:51
由于系统中iconv没有 UNICODE 这个编码,用iconv_open不行。
然后用 setlocate,wcstombs也不行。
求查码表的代码,或看怎么解决
...全文
304 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujiok2003 2015-01-30
  • 打赏
  • 举报
回复
ubuntu@:~/src$ locale -a
C
C.UTF-8
en_US.utf8
POSIX
zh_CN.gbk
zh_CN.utf8
ubuntu@:~/src$ cat test.cpp
#include <iostream>
#include <clocale>

int main()
{
   setlocale(LC_ALL, "zh_CN.UTF-8");
   wchar_t str[3] = {0x6210, 0x529f, 0};
   std::wcout << str << std::endl;
   return 0;
}
ubuntu@:~/src$ g++ -o test  test.cpp
ubuntu@:~/src$ ./test
成功
赵4老师 2015-01-30
  • 打赏
  • 举报
回复
引用 6 楼 fang3453126 的回复:
[quote=引用 4 楼 luciferisnotsatan 的回复:] UNICODE 本身不就包括中文。 是你没装中文字体吧
AIX系统,现在问题是这样的,我收到别人发过来的字符串 成,功 需要转成中文“成功”[/quote] 不一定对,仅供参考:
// UTF-8 编码字符理论上可以最多到 6个字节长,但目前全世界的所
// 有文字和符号种类加起来也只要编到 4个字节长就够了。
//   UTF-8 是以 8位(即 1个字节)为单元对原始码进行编码(注意一
// 点:这里所讲的原始码都是指Unicode码),并规定:多字节码(2个字
// 节以上才称为多字节)以转换后第1个字节起头的连续“1”的数目(这
// 些连续“1”称为标记位),表示转换成几个字节:“110”连续两个
// “1”,表示转换结果为2个字节,“1110”表示3个字节,而“11110”
// 则表示4个字节……跟随在标记位之后的“0”,其作用是分隔标记位和
// 字符码位。第2~第4个字节的起头两个位固定设置为“10”,也作为标
// 记,剩下的6个位才做为字符码位使用。
//   这样,2字节UTF-8码剩下11个字符码位,可用以转换0080~07FF的
// 原始字符码,3字节剩下16个字符码位,可用以转换0800~FFFF的原始字
// 符码,由此类推。编码方式的模板如下:
//
// 原始码(16进制) UTF-8编码(二进制)
// --------------------------------------------
// 0000 - 007F       0xxxxxxx
// 0080 - 07FF       110xxxxx 10xxxxxx
// 0800 - FFFF       1110xxxx 10xxxxxx 10xxxxxx
// ……
// --------------------------------------------
//
//   模板中的“x”表示字符码。
//   Ascii码<007F,编为1个
// 字节的UTF-8码。汉字的 Unicode编码范围为0800-FFFF,所以被编为
// 3个字节的UTF-8码。
//   例如“汉”字的Unicode编码是6C49,6C49在0800-FFFF之间,所以
// 要用3个字节的模板:1110wwww 10xxxxyy 10yyzzzz。

//    6    C    4    9
// 0110 1100 0100 1001
// wwww xxxx yyyy zzzz
//     wwww   xxxxyy   yyzzzz
// 1110wwww 10xxxxyy 10yyzzzz。
// 11100110 10110001 10001001
//    E   6    B   1    8   9
//“汉”字的UTF-8编码是E6 B1 89

// 成,功需要转成中文“成功”
#include <stdio.h>
char u[]="成,功";
unsigned short int w[2];
unsigned char utf8[7];
int main() {
    sscanf(u,"&#x%4hx,&#x%4hx",&w[0],&w[1]);
    utf8[0]=0xe0u|(w[0]>>12);
    utf8[1]=0x80u|((w[0]>>6)&0x3fu);
    utf8[2]=0x80u|(w[0]&0x3fu);
    utf8[3]=0xe0u|(w[1]>>12);
    utf8[4]=0x80u|((w[1]>>6)&0x3fu);
    utf8[5]=0x80u|(w[1]&0x3fu);
    utf8[6]=0;
    printf("%s\n",(char *)utf8);
    return 0;
}
fang3453126 2015-01-30
  • 打赏
  • 举报
回复
引用 4 楼 luciferisnotsatan 的回复:
UNICODE 本身不就包括中文。 是你没装中文字体吧
AIX系统,现在问题是这样的,我收到别人发过来的字符串 成,功 需要转成中文“成功”
fang3453126 2015-01-30
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
除非是转UTF8或转GBK、BIG5啥的。
AIX系统,现在问题是这样的,我收到别人发过来的字符串 成,功 需要转成中文“成功”
luciferisnotsatan 2015-01-30
  • 打赏
  • 举报
回复
UNICODE 本身不就包括中文。 是你没装中文字体吧
赵4老师 2015-01-30
  • 打赏
  • 举报
回复
// UTF-8 编码字符理论上可以最多到 6个字节长,但目前全世界的所
// 有文字和符号种类加起来也只要编到 4个字节长就够了。
//   UTF-8 是以 8位(即 1个字节)为单元对原始码进行编码(注意一
// 点:这里所讲的原始码都是指Unicode码),并规定:多字节码(2个字
// 节以上才称为多字节)以转换后第1个字节起头的连续“1”的数目(这
// 些连续“1”称为标记位),表示转换成几个字节:“110”连续两个
// “1”,表示转换结果为2个字节,“1110”表示3个字节,而“11110”
// 则表示4个字节……跟随在标记位之后的“0”,其作用是分隔标记位和
// 字符码位。第2~第4个字节的起头两个位固定设置为“10”,也作为标
// 记,剩下的6个位才做为字符码位使用。
//   这样,2字节UTF-8码剩下11个字符码位,可用以转换0080~07FF的
// 原始字符码,3字节剩下16个字符码位,可用以转换0800~FFFF的原始字
// 符码,由此类推。编码方式的模板如下:
//
// 原始码(16进制) UTF-8编码(二进制)
// --------------------------------------------
// 0000 - 007F       0xxxxxxx
// 0080 - 07FF       110xxxxx 10xxxxxx
// 0800 - FFFF       1110xxxx 10xxxxxx 10xxxxxx
// ……
// --------------------------------------------
//
//   模板中的“x”表示字符码。
//   Ascii码<007F,编为1个
// 字节的UTF-8码。汉字的 Unicode编码范围为0800-FFFF,所以被编为
// 3个字节的UTF-8码。
//   例如“汉”字的Unicode编码是6C49,6C49在0800-FFFF之间,所以
// 要用3个字节的模板:1110wwww 10xxxxyy 10yyzzzz。

//    6    C    4    9
// 0110 1100 0100 1001
// wwww xxxx yyyy zzzz
//     wwww   xxxxyy   yyzzzz
// 1110wwww 10xxxxyy 10yyzzzz。
// 11100110 10110001 10001001
//    E   6    B   1    8   9
//“汉”字的UTF-8编码是E6 B1 89
赵4老师 2015-01-30
  • 打赏
  • 举报
回复
除非是转UTF8或转GBK、BIG5啥的。
赵4老师 2015-01-30
  • 打赏
  • 举报
回复
UNICODE不用转,本来就包括中文。
内容概要:本文详细介绍了利用Simulink进行变压器开路试验的电路连接配置与仿真实现方法,重点在于通过仿真手段还原实际电力系统中变压器在空载条件下的电气特性,从而深入理解其工作原理与性能表现。文章作为电力系统仿真系列研究的一部分,系统阐述了从电路模型搭建、参数设定、仿真运行到结果分析的完整流程,突出展示了MATLAB/Simulink在电力设备建模与教学科研中的强大功能与应用价值。; 适合人群:具备电力系统基础知识,熟悉MATLAB/Simulink仿真环境,从事电气工程、自动化及相关领域的研发人员,以及高年级本科生和研究生。; 使用场景及目标:①掌握变压器开路试验的基本原理与Simulink仿真建模的具体步骤;②通过仿真实验深入理解空载电流、铁芯损耗及励磁特性等关键参数的物理意义;③为后续开展变压器短路试验、暂态过程分析以及其他电力设备的仿真研究奠定理论与实践基础。; 阅读建议:建议结合Simulink软件动手实践,逐步构建并调试电路模型,重点关注各元件参数的设置方法与测量模块的应用技巧,同时推荐参考文中提及的其他相关仿真案例进行拓展学习,以全面提升对电力系统仿真实践的整体认知与操作能力。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧