编码转换

转载 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");
}


中文字符编码的相互转换

转载 http://blog.csdn.net/yulongli/article/details/22894645作为程序员,在日常的工作中总会遇到编码的知识。尤其是在前后台交互的过程中,字符编码如...
  • smallmount123
  • smallmount123
  • 2017年06月06日 20:18
  • 262

Char Tools,方便的字符编码转换小工具

Char Tools是一款方便的字符编码转换小工具,支持URLEncode/URLDecode/Base64 Encode/Base64 Decode/HTML实体编号字符转换/Unicode转义字符...
  • itzmn
  • itzmn
  • 2015年07月03日 00:04
  • 188

Gnu Linux下文件的字符编码及转换工具

在GNU Linux中查看当前文件的编码方式: 可以通过vim打开此文件后在控制模式时输入  :set fileencoding  可以查看到当前文件的字符编码格式,会在vim窗口下方显示如下内...
  • yygydjkthh
  • yygydjkthh
  • 2014年07月03日 20:01
  • 1684

java编码转换的详细过程

常见的JAVA程序包括以下类别: *直接在console上运行的类(包括可视化界面的类) *JSP代码类(注:JSP是Servlets类的变型) *Servelets类 *EJB类 *其它不...
  • jet_Cheng
  • jet_Cheng
  • 2014年12月24日 17:10
  • 1143

字符编码转换c++库

Introduction to libiconv For historical reasons, international text is often encoded using a langua...
  • zzuriemann
  • zzuriemann
  • 2014年10月26日 14:16
  • 304

linux 下命令编码转换

用 iconv , 没有就用 piconv,用法 iconv -f "gbk" -t "utf-8" outfile piconv -f "gbk" -t "utf-8" outfile 如...
  • nomisshe
  • nomisshe
  • 2014年05月12日 16:29
  • 1034

中文字符编码的相互转换(一)

作为程序员,在日常的工作中总会遇到编码的知识。尤其是在前后台交互的过程中,字符编码如影随行。如果多个平台的字符编码不一致,需要相互转化的话,很有必要了解一下编码的工作原理。 网上有太多关于编码的知识...
  • yulongli
  • yulongli
  • 2014年04月03日 20:46
  • 6970

javaScript中URL编码转换

在使用url进行参数传递时,经常会传递一些中文名的参数或带特殊字符的参数或URL地址,在后台处理时会发生转换错误。在有些传递页面使用GB2312,而在接收页面使用UTF8,这样接收到的参数就可能会与原...
  • lcb521
  • lcb521
  • 2008年08月28日 16:24
  • 2442

浅谈C/C++编程中的字符编码转换

背景在写跨平台的C/C++代码过程中(本文的研究只限于C/C++范畴),经常会遇到中文字符串乱码的问题。比如,同一个源码,用MSVC编译/运行能正常显示中文字符串,但在linux下编译/运行显示中文字...
  • benkaoya
  • benkaoya
  • 2017年03月02日 15:11
  • 3927

使用windows api实现任意两种字符编码的转换

用到两个函数:MultiByteToWideChar, WideCharToMultiByte。 使用这两个API实现任意两种字符编码的转换非常简单:将源字符串使用MultiByteToWideCha...
  • jcwKyl
  • jcwKyl
  • 2008年12月19日 22:54
  • 3329
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编码转换
举报原因:
原因补充:

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