编码转换

转载 2016年08月29日 10:45:52

如果使用CGI 从前台获到的字符串有时需要进行编码转换,下面就是对中文字符的编码进行转换。详见代码:

%D6%D0%B9%FA:的中文编码为:中国

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>


char * chang(char *str)
{
	char *tempstr = malloc(strlen(str) + 1);
	//这儿没有使用初始化为 是因为下面 while 循环使用了它,如果初始化为则一次也不执行。
	//如果改成 for 就可以初始化了。
	memset(tempstr, '\0', strlen(str)+1);	
	int x = 0, y = 0;
	char assii_1, assii_2;
	int length = strlen(str);
	//下面主要逻辑就是 每次循环要跳过 3个字符 即%和后面2个字符。这是一个整体,把这个结果赋值给字符数组。
	//还有就是 "%B9%FA" %后第一个字符如果大于等于 A 则要减去 55 否则减去 48 第一个字符与第二个字符的区别就是
	//结果第一个字符需要乘以 16 后面一个不需要,即把 16进制,转换成 10 进制。详见下面代码。
	for (int y = 0; y < length;)
	//while (tempstr[x]) 
	{
		if ((tempstr[x] = str[y]) == '%')
		{
			//y+1 y+2
			if (str[y + 1] >= 'A')
			{
				assii_1 = str[y + 1] - 55;

			}
			else
			{
				assii_1 = str[y + 1] - 48;
			}
			if (str[y + 2] >= 'A')
			{
				assii_2 = str[y + 2] - 55;
			}
			else
			{
				assii_2 = str[y + 2] - 48;
			}
			tempstr[x] = assii_1 * 16 + assii_2;

			y += 2;

		}
		x++;
		y++;
	}
	tempstr[x] = '\0';

	return tempstr;

}


void main()
{

	//char strx[7] = "%B9%FA";
	//char str[3] = { 0 };
	////str[0]= 214;//'D' '6'  13*16+6
	////str[1]=208;//'D' '0'   13*16+0

	//str[0] = ('B' - 55) * 16 + '9' - 48;
	//str[1] = ('F' - 55) * 16 + ('A'-55);
	//printf("%s", str);
	
	char str[100] = "%D6%D0%B9%FA";
	
	//下面是代码测试。
	//char temp[100] = { 0 };		
	//int k = 0;
	//int asc1, asc2;

	//for (int i = 0; i < strlen(str); i+=3)
	//{
	//	if (str[i + 1]>='A')
	//		asc1 = (str[i + 1] - 55) * 16;
	//	else
	//		asc1 = str[i + 1] - 48;

	//	//注意i+1与i+2 在编码转换上的区别 如果是大于等于 'A'时 一个要乘以16,一个不用乘以16。
	//	if (str[i + 2] >= 'A')
	//		asc2 = (str[i + 2]-55);
	//	else
	//		asc2 = str[i + 2] - 48;

	//	temp[k++] = asc1 + asc2;
	//}
	//printf("%s\n", temp);

	//把上面的代码封装到一个函数中。
	char *p = chang(str);
	printf("%s\n", p);

	system("pause");
}


相关文章推荐

java文本编码转换

  • 2016年09月03日 17:02
  • 2KB
  • 下载

字符编码转换iconv

  • 2016年08月12日 15:05
  • 637KB
  • 下载

主题:java 编码转换工具 native2ascii (中文与Unicode等互转)使用小结

Java代码  native2ascii [options] [inputfile [outputfile]]         查官方api文档,命令如下:      官方对参数的解释也清...
  • rex0y
  • rex0y
  • 2012年08月21日 10:49
  • 540

编码转换小工具

  • 2017年02月21日 15:46
  • 1.83MB
  • 下载

ruby编码转换

  • 2016年06月30日 10:07
  • 2KB
  • 下载

C++与C#网络传输中的编码转换

近期的项目因为客户端用的是Unity3D(使用C#),服务端用的是C++(VS2013,Windows)。所以当他们相互传输中文字符串的时候不能正常工作。经过一番研究,把最终的解决方案分享出来。 思路...
  • LYH66
  • LYH66
  • 2015年08月27日 16:32
  • 1323

编码转换工具

  • 2013年09月11日 16:54
  • 23KB
  • 下载

java字符编码转换研究(转)

1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4...

文字编码转换工具

  • 2013年08月27日 16:35
  • 31KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编码转换
举报原因:
原因补充:

(最多只允许输入30个字)