篇一:linux乱码与编码格式--su
在windows编辑的文件在LINUX下有时会出现乱码,是因为编码格式不一样。
LINUX下英文环境默认是UTF-8编码,而LINUX下中文环境默认是gb2312等编码。 可在终端中直接修改显示格式:terminal-》set Char。。。》addandremov》gb2312 也可在windows下把文件另存为UTF-8格式。
篇二:打印Linux系统错误编码及提示
系统运维工程师和系统开发工程师在日常工作中,经常会遇到此类问题“当你进行了一些不当操作,系统会给你错误提示”,这些错误提示在操作系统中都是错误编码的,每一个提示对应一个错误编码,错误编码供程序代码中方便调用,接下来我们会打印出linux操作系统的错误编码及提示,如下:
一、系统环境
系统版本:
内核版本:
二、程序代码
代码如下:
三、编译运行
结果如下:
[root@CentOS6 erro_num]# gcc error_num.c
[root@centos6 erro_num]# ./a.out
0:Success
1:Operation not permitted
2:No such file or directory
3:No such process
4:Interrupted system call
5:Input/output error
6:No such device or address
7:Argument list too long
8:Exec format error
9:Bad file descriptor
10:No child processes
11:Resource temporarily unavailable
12:Cannot allocate memory
13:Permission denied
14:Bad address
15:Block device required
16:Device or resource busy
17:File exists
18:Invalid cross-device link
19:No such device
20:Not a directory
21:Is a directory
22:Invalid argument
23:Too many open files in system
24:Too many open files
25:Inappropriate ioctl for device
26:Text file busy
27:File too large
28:No space left on device
29:Illegal seek
30:Read-only file system
31:Too many links
32:Broken pipe
33:Numerical argument out of domain
34:Numerical result out of range
35:Resource deadlock avoided
36:File name too long
37:No locks available
38:Function not implemented
39:Directory not empty
40:Too many levels of symbolic links
41:Unknown error 41
42:No message of desired type
43:Identifier removed
44:Channel number out of range
45:Level 2 not synchronized
46:Level 3 halted
47:Level 3 reset
48:Link number out of range
49:Protocol driver not attached
50:No CSI structure available
51:Level 2 halted
52:Invalid exchange
53:Invalid request descriptor
54:Exchange full
55:No anode
56:Invalid request code
57:Invalid slot
58:Unknown error 58
59:Bad font file format
60:Device not a stream
61:No data available
62:Timer expired
63:Out of streams resources
64:Machine is not on the network
65:Package not installed
66:Object is remote
67:Link has been severed
68:Advertise error
69:Srmount error
70:Communication error on send
71:Protocol error
72:Multihop attempted
73:RFS specific error
74:Bad message
75:Value too large for defined data type
76:Name not unique on network
77:File descriptor in bad state
78:Remote address changed
79:Can not access a needed shared library
80:Accessing a corrupted shared library
81:.lib section in a.out corrupted
82:Attempting to link in too many shared libraries
83:Cannot exec a shared library directly
84:Invalid or incomplete multibyte or wide character
85:Interrupted system call should be restarted
86:Streams pipe error
87:Too many users
88:Socket operation on non-socket
89:Destination address required
90:Message too long
91:Protocol wrong type for socket
92:Protocol not available
93:Protocol not supported
94:Socket type not supported
95:Operation not supported
96:Protocol family not supported
97:Address family not supported by protocol
98:Address already in use
99:Cannot assign requested address
100:Network is down
101:Network is ueachable
102:Network dropped connection on reset
103:Software caused connection abort
104:Connection reset by peer
105:No buffer space available
106:Transport endpoint is already connected
107:Transport endpoint is not connected
108:Cannot send after transport endpoint shutdown
109:Too many references: cannot splice
110:Connection timed out
111:Connection refused
112:Host is down
113:No route to host
114:Operation already in progress
115:Operation now in progress
116:Stale NFS file handle
117:Structure needs cleaning
118:Not a XENIX named type file
119:No XENIX semaphores available
120:Is a named type file
121:Remote I/O error
122:Disk quota exceeded
123:No medium found
124:Wrong medium type
125:Operation canceled
126:Required key not available
127:Key has expired
128:Key has been revoked
129:Key was rejected by service
130:Owner died
131:State not recoverable
如果你看过nginx-1.0.10源码,里面有一个类似的错误编码预定义 135个,在
objs/ngx_auto_config.h 中,#define NGX_SYS_NERR135,事实证明,这种思想是非常可取的,我们自己写软件的时候,不妨尝试一下?
rdzs.shudaoge.com/儒道至圣最新章节
篇三:Windows和Linux的字符编码互转的方法
前谈过一篇关于Linux下面Unicode使用的文章。那个主要是针对多字节和宽字符的转换而谈的。今天说的有些类似,主要是windows下面关于字符编码转换和Linux下面的不同。
我移植的那部分程序中,有函数是用来实现UTF-8和GBK之间的转换的。其实其他很多不同类型的字符之间转换都可以用这种方法。
先说windows。因为windows下面没有函数可以实现这一功能,所以得自己写。思路很简单,就是利用之前讲过的那两个函数来实现,即:MultiByteToWideChar和WideCharToMultiByte来实现。先将其中一种编码(如UTF-8)利用MultiByteToWideChar转换为宽字节,然后再利用WideCharToMultiByte转换为另一种编码(如GBK)。反过来也是一样的。
附加代码:utf-8 转为 gbk
#if WIN32
bool Utf8ToGbk(const void *utf8Str,char *pStr)
{
//获取转换到gbk编码后 所需的字符空间长度; nLen = ::WideCharToMultiByte(CP_ACP,0,unicodeStr,-1,NULL,NULL,NULL,NULL); CHAR *gbkStr = new CHAR[nLen+1]; //unicode字符串空间; //转换到gbk编码; nLen = ::WideCharToMultiByte(CP_ACP,0,unicodeStr,-1,gbkStr,nLen,NULL,NULL); if (!nLen){} strcpy(pStr,gbkStr); delete[] gbkStr; delete[] gbkStr; return false; //获取转换到unicode编码后 所需的字符空间长度; nLen = ::MultiByteToWideChar(CP_UTF8,0,(char*)utf8Str,-1,NULL,NULL); WCHAR *unicodeStr = new WCHAR[nLen+1]; //unicode字符串空间; //转换到unicode编码; nLen = ::MultiByteToWideChar(CP_UTF8,0,(char*)utf8Str,-1,unicodeStr,nLen); if (!nLen){} // -------------------- // delete[] unicodeStr; return false; if (utf8Str == NULL){ } int nLen = 0; return false;
} return true;
#endif
下面给出代码: LONG UTF8ToGBK(const void * lpUTF8Str, string & str)
{
if(lpUTF8Str == NULL) return -1;
int nRetLen = 0;
//获取转换到Unicode编码后所需要的字符空间长度
nRetLen = ::MultiByteToWideChar(CP_UTF8, 0,
(char *)lpUTF8Str, -1, NULL, NULL);
WCHAR *lpUnicodeStr = new WCHAR[nRetLen + 1];
//为Unicode字符串空间
//转换到Unicode编码
nRetLen = ::MultiByteToWideChar(CP_UTF8, 0,
(char *)lpUTF8Str, -1, lpUnicodeStr, nRetLen);
if(!nRetLen)
{
delete []lpUnicodeStr; return -1;
}
//获取转换到GBK编码后所需要的字符空间长度
nRetLen = ::WideCharToMultiByte(CP_ACP, 0, lpUnicodeStr,
-1, NULL, NULL, NULL, NULL);
CHAR *lpGBKStr = new CHAR[nRetLen + 1];
nRetLen = ::WideCharToMultiByte(CP_ACP, 0, lpUnicodeStr,
-1, (char *)lpGBKStr, nRetLen, NULL, NULL);
//转换到GBK编码
if(!nRetLen)
{
delete []lpUnicodeStr;
delete []lpGBKStr;
return -2;
}
str = lpGBKStr;
delete []lpUnicodeStr;
delete []lpGBKStr;
return 0;
}
再来看Linux,它已经提供了函数可以实现这一功能,不仅如此,Linux还可以实现批量文件的字符编码转换呢。只不过在Linux下面支持的字符集多少会和Windows的不同,所以一定得先查字符集有哪些,再去使用函数。这里推荐使用locale –m命令,得到的字符集比较全。
实现这一功能的正是iconv函数族,包含以下三个函数:
iconv_t iconv_open(const char *tocode, const char *fromcode);
此函数说明将要进行哪两种编码的转换,tocode是目标编码,fromcode是原编码,该函数返回一个转换句柄,供以下两个函数使用。
size_t iconv(iconv_t cd,char **inbuf,size_t *inbytesleft,char **outbuf,size_t *outbytesleft);
此函数从inbuf中读取字符,转换后输出到outbuf中,inbytesleft用以记录还未转换的字符数,outbytesleft用以记录输出缓冲的剩余空间。
int iconv_close(iconv_t cd);
此函数用于关闭转换句柄,释放资源。
下面给demo代码:
#include <stdio.h>
#include <iconv.h>
#include <string.h>
#define BUFLEN 256
char outbuf[BUFLEN];
char inbuf[BUFLEN] = "characters convertion";
int main()
{
char *pin = inbuf;
char *pout = outbuf;
int inlen = strlen(pin);
int outlen = BUFLEN;
int retsize;
iconv_t cd;
cd = iconv_open("UTF-8", "GBK");
if((iconv_t)-1 == cd) {
perror("iconv_open error");
return -1;
}
retsize = iconv(cd, &pin, (size_t *)&inlen, &pout, (size_t *)&outlen);
if((size_t)-1 == retsize) {
perror("iconv error");
return -2;
}
if(outlen > 0) {
printf("%s\n", outbuf);
}
iconv_close(cd);
return 0;
}
《查看linux系统编码》
由:免费论文网互联网用户整理提供,链接地址:
http://m.csmayi.cn/meiwen/30614.html
转载请保留,谢谢!
- 上一篇:朱顶红新品种
- 下一篇:梨树苗种植基地