网络编程
位置:首页>> 网络编程>> JavaScript>> 字符,字节和编码(4)

字符,字节和编码(4)

 来源:我想网 发布时间:2009-12-09 15:59:00 

标签:字符,编码,乱码,字节

2. 字符与编码在程序中的实现

2.1 程序中的字符与字节

在 C++ 和 Java 中,用来代表“字符”和“字节”的数据类型,以及进行编码的方法:

类型或操作C++Java
字符wchar_tchar
字节charbyte
ANSI 字符串char[]byte[]
UNICODE 字符串wchar_t[]String
字节串→字符串mbstowcs(), MultiByteToWideChar()string = new String(bytes, “encoding”)
字符串→字节串wcstombs(), WideCharToMultiByte()bytes = string.getBytes(”encoding”)

以上需要注意几点:

  1. Java 中的 char 代表一个“UNICODE 字符(宽字节字符)”,而 C++ 中的 char 代表一个字节。

  2. MultiByteToWideChar() 和 WideCharToMultiByte() 是 Windows API 函数。

2.2 C++ 中相关实现方法

声明一段字符串常量:

char sz[] = ;



wchar_t wsz[] = L;

UNICODE 字符串的 I/O 操作,字符与字节的转换操作:

setlocale(LC_ALL, );



setlocale(LC_ALL, );

// GCC 中使用大写 %S
fwprintf(fp, L, wsz);


wcstombs(sz, wsz, );// 把字节串按照 setlocale 指定的编码转换成 UNICODE 字符串
mbstowcs(wsz, sz, );

在 Visual C++ 中,UNICODE 字符串常量有更简单的表示方法。如果源程序的编码与当前默认 ANSI 编码不符,则需要使用 #pragma setlocale,告诉编译器源程序使用的编码:

// 则需要此行,编译时用来指明当前源程序使用的编码#pragma setlocale()



wchar_t wsz[] = L;

以上需要注意 #pragma setlocale 与 setlocale(LC_ALL, “”) 的作用是不同的,#pragma setlocale 在编译时起作用,setlocale() 在运行时起作用。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com