编码

  什么是编码?

  计算机中存储的都是二进制,但是要显示的时候,就是我们看到的却可以有中国 ,a  1 等字符

  计算机中是没有存储字符的,但是我们却看到了。计算机在存储这些信息的时候,根据一个有规

则的编号,当用户输入a 有a对映的编号,就将这个编号存进计算机中这就是编码。

  

  计算机只能识别二进制数据。

  为了方便应用计算机,让它可以识别各个国家的文字。就将各个国家的文字用数字来表示,

并一一对应,形成一张表,这就是编码表

例如:

    汉字 中

  有一种编码:

  中字在utf 8中对映的编码            utf-8  -->  100

  在gbk中呢?有可能就不是100了   gbk    -->  150

  很显然同一个信息在不同的编码中对映的数字也不同,

  不同的国家和地区使用的码表是不同的,

  gbk 是中国大陆

  bjg5 是台湾同胞中的繁体字。所以如果给big5一个简体字是不认识的。

  还有ASCII 美国标准信息交换码

码表

常见的码表如下:

ASCII 美国标准信息交换码。用一个字节的7位可以表示。
ISO8859-1 拉丁码表。欧洲码表,用一个字节的8位表示。
GB2312 中国的中文编码表
GBK 中国的中文编码表升级,融合了更多的中文文字符号
Unicode 国际标准码,融合了多种文字。所有文字都用两个字节来表示,Java语言使用的就是unicode。
UTF-8 最多用三个字节来表示一个字符。

  我们以后接触最多的是iso8859-1、gbk、utf-8

  ISO8859-1又称Latin-1(拉丁编码)或“西欧语言”。

  ASCII码是包含的仅仅是英文字母,并且没有完全占满256个编码位置,所以它以ASCII为基础,

在空置的0xA0-0xFF的范围内,加入192个字母及符号,藉以供使用变音符号的拉丁字母语言

使用。从而支持德文,法文等。因而它依然是一个单字节编码,只是比ASCII更全面。

  查看上述码表后,很显然中文的‘中’在iso8859-1中是没有对映的编码的。

或者一个字符在2中码表中对应的编码不同,例如有一些字在不同的编码中是有交集的,

例如bjg5 和gbk 中的汉字简体和繁体可能是一样的,就是有交集,但是在各自码表中

的数字不一样。

例如

使用gbk 将中文保存在计算机中,中  国   对映  100  200

如果使用big5 打开  可能   ?  ...

不同的编码对映的是不一样的。

很显然,我们使用什么样的编码写数据,就需要使用什么样的编码来对数据。

ISO8859-1:一个字节

GBK: 两个字节包含了英文字符和扩展的中文   ISO8859-1+中文字符

UTF-8 万国码,推行的。是1~3个字节不等长。英文存的是1个字节,中文存的是3个字节,是为了节省空间。

编码:

字符串---》字节数组

String类的getBytes() 方法进行编码,将字符串,转为对映的二进制,并且这个方法可以指定编码表。

如果没有指定码表,该方法会使用操作系统默认码表。

aaarticlea/png;base64,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" alt="" />

注意:中国大陆的Windows系统上默认的编码一般为GBK。

在Java程序中可以使用System.getProperty("file.encoding")方式得到当前的默认编码。

解码:

字节数组---》字符串

String类的构造函数完成。

aaarticlea/png;base64,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" alt="" />

注意:我们使用什么字符集(码表)进行编码,就应该使用什么字符集进行解码,否则很有可能出现乱码(兼容字符集不会)。

// 编码操作与解码操作。
public static void main(String[] args) throws Exception {
String value = System.getProperty("file.encoding");
System.out.println("系统默认的编码为 " + value); String str = "中";
// 编码操作
byte[] bytes = str.getBytes();
byte[] bytes2 = str.getBytes("gbk");// d6d0
byte[] bytes3 = str.getBytes("utf-8");// e4b8ad System.out.println(Arrays.toString(bytes)); // [-42, -48]
System.out.println(Arrays.toString(bytes2));// [-42, -48]
System.out.println(Arrays.toString(bytes3));// [-28, -72, -83] // 解码操作
// 编码gbk,解码utf-8乱码。
String str2 = new String(bytes2, "utf-8");
System.out.println(str2);//?? // 编码utf-8 解码gbk,乱码
str2 = new String(bytes3, "gbk");
System.out.println(str2);//涓?
// gbk兼容gb2312所以,没有问题。
str = new String("中国".getBytes("gb2312"), "gbk");
System.out.println(str);//中国
}

  存文件时可以使用各种编码,但是解码的时候要对映的采用相同的解码方式。

  我们的字符流自动的做了编码和解码的工作,写一个中文,字符流进行了编码,

存到了计算机中读到了一个字符,字符流进行了解码,我们可以看到字符。因为文件存的都是二进制。

但是拷贝图片时,是纯二进制,不是有意义的字符,所以码表无法转换。

字符流的弊端:

一:无法拷贝图片和视频。

二:拷贝文件使用字节流而不使用字符流,因为字符流读文件涉及到解码,会先解码,

写文件的时候又涉及到编码,这些操作多余,而且读和写的码表不对应还容易引发问题。

例如FileReader 读文件,我们没有指定编码时,默认是按照系统编码gbk进行操作,如果

读到utf-8的文件也是按照gbk编码进行解码,那就会出现问题。

字节流读取中文

可以将字节输入流读取的信息保存在字节数组中,指定对应的码表进行解码即可。

public class TestIo {
public static void main(String[] args) throws IOException {
readFileByInputStream("c:\\a.txt");
} private static void readFileByInputStream(String path) throws IOException {
FileInputStream fis = new FileInputStream(path);
int len = 0;
byte[] buffer = new byte[1024];
while ((len = fis.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, len, "gbk"));
} }
}

注意:如果指定的编码表和解码表不对应就会出现问题

public class TestIo {
public static void main(String[] args) throws IOException {
// 该文件默认是gbk编码
readFileByInputStream("c:\\a.txt");
} private static void readFileByInputStream(String path) throws IOException {
FileInputStream fis = new FileInputStream(path);
int len = 0;
byte[] buffer = new byte[1024];
while ((len = fis.read(buffer)) != -1) {
// 使用utf-8 解码,解错。
System.out.println(new String(buffer, 0, len, "utf-8"));
} }
}

字节流写出中文

需要编码,可以指定码表。就需要自己把字符串进行编码操作后,把得到的二进制内容通过字节流

写入到文件中使用String的getBytes方法,无参数的会使用系统默认的码表进行编码,也可以指定码表

系统默认编码

public class TestIo {
public static void main(String[] args) throws IOException { String path = "c:\\test.txt";
writeFileByOutputStream(path, "世界你好");
readFileByInputStream(path);
} private static void writeFileByOutputStream(String path, String content)
throws IOException {
FileOutputStream fos = new FileOutputStream(path);
// 把字符串进行编码操作,系统默认编码
byte[] bytes = content.getBytes();
// 内容通过字节流写入到文件中。
fos.write(bytes);
fos.close();
}
private static void readFileByInputStream(String path) throws IOException {
FileInputStream fis = new FileInputStream(path);
int len = 0;
byte[] buffer = new byte[1024]; while ((len = fis.read(buffer)) != -1) {
// 二进制解码,使用系统默认编码
System.out.println(new String(buffer, 0, len));
} }
}

800x600

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

MicrosoftInternetExplorer4

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}

使用utf-8进行编码

public class TestIo {
public static void main(String[] args) throws IOException {
String path = "c:\\test.txt";
writeFileByOutputStream(path, "世界你好");
readFileByInputStream(path);
}
private static void writeFileByOutputStream(String path, String content)
throws IOException {
FileOutputStream fos = new FileOutputStream(path);
// 把字符串进行编码操作
byte[] bytes = content.getBytes("utf-8");
// 内容通过字节流写入到文件中。
fos.write(bytes);
fos.close();
} private static void readFileByInputStream(String path) throws IOException {
FileInputStream fis = new FileInputStream(path);
int len = 0;
byte[] buffer = new byte[1024];
while ((len = fis.read(buffer)) != -1) {
// 二进制解码,使用系统默认编码
System.out.println(new String(buffer, 0, len,"utf-8"));
} }
}

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

MicrosoftInternetExplorer4

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}

在明白了字节流也可以正确的处理中文字符之后,就应该明白字符流其实就是字节流

在加上系统默认的码表。自动进行了编码和解码的操作。底层还是使用字节流读取文件。

通过转换流的学习就可以明白这些道理。

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

MicrosoftInternetExplorer4

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}

转换流

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

MicrosoftInternetExplorer4

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}

InputStreamReader

  查看API文档,发现是字节流通向字符流的桥梁。查看构造,可以传递字节流,可以

指定编码,该流可以实现什么功能?很显然可以包装我们的字节流,自动的完成节流

编码和解码的工作。该流是一个Reader的子类,是字符流的体系。所以将转换流称之

为字节流和字符流之间的桥梁。

InputStreamReader 是字节流通向字符流的桥梁

测试InputStreamReader:

aaarticlea/png;base64,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" alt="" />

第一步: 需要专门新建以GBK编码的文本文件。为了便于标识,我们命名为gbk.txt

和以UFT-8编码的文本文件,命名为utf.txt
   第二步: 分别写入汉字”中国”

第三步:编写测试方法,用InputStreamReader 分别使用系统默认编码,GBK,UTF-8编码读取文件.

public class Demo4 {
public static void main(String[] args) throws IOException {
File file = new File("c:\\a.txt");
File fileGBK = new File("c:\\gbk.txt");
File fileUTF = new File("c:\\utf.txt");
// 默认编码
testReadFile(file);
// 传入gbk编码文件,使用gbk解码
testReadFile(fileGBK, "gbk");
// 传入utf-8文件,使用utf-8解码
testReadFile(fileUTF, "utf-8");
} // 该方法中nputStreamReader使用系统默认编码读取文件.
private static void testReadFile(File file) throws
IOException {
FileInputStream fis = new FileInputStream(file);
InputStreamReader ins = new InputStreamReader(fis);
int len = 0;
while ((len = ins.read()) != -1) {
System.out.print((char) len);
}
ins.close();
fis.close();
}
// 该方法使用指定编码读取文件
private static void testReadFile(File file, String encod)
throws IOException {
FileInputStream fis = new FileInputStream(file);
InputStreamReader ins = new InputStreamReader(fis, encod);
int len = 0;
while ((len = ins.read()) != -1) {
System.out.print((char) len);
}
ins.close();
}
}

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

MicrosoftInternetExplorer4

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}

OutputStreamWriter

那么其实还有OutputStreamWriter 可以转换OutputStream

OutputStreamWriter 是字符流通向字节流的桥梁

测试OutputStreamWriter

aaarticlea/png;base64,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" alt="" />

一: 分别使用OutputStreamWriter使用系统默认编码,GBK,UTF-8相对应的默认编码文件,GBK编码文件,UTF-8编码文件中写出汉字”中国”.

二: 在使用上述案例中的readFile方法传入相对应码表读取.

public class TestIo {
public class Demo4 {
public static void main(String[] args) throws IOException {
File file = new File("c:\\a.txt");
File fileGBK = new File("c:\\gbk.txt");
File fileUTF = new File("c:\\utf.txt");
// 写入
// 使用系统默认码表写入
testWriteFile(file);
// 使用gbk编码向gbk文件写入信息
testWriteFile(fileGBK, "gbk");
// 使用utf-8向utf-8文件中写入信息
testWriteFile(fileUTF, "utf-8");
// 读取
// 默认编码
testReadFile(file);
// 传入gbk编码文件,使用gbk解码
testReadFile(fileGBK, "gbk");
// 传入utf-8文件,使用utf-8解码
testReadFile(fileUTF, "utf-8"); } // 使用系统码表将信息写入到文件中
private static void testWriteFile(File file) throws IOException {
FileOutputStream fos = new FileOutputStream(file);
OutputStreamWriter ops = new OutputStreamWriter(fos);
ops.write("中国");
ops.close();
}
// 使用指定码表,将信息写入到文件中
private static void testWriteFile(File file, String encod)
throws IOException {
FileOutputStream fos = new FileOutputStream(file);
OutputStreamWriter ops = new OutputStreamWriter(fos, encod);
ops.write("中国");
ops.close();
} // 该方法中nputStreamReader使用系统默认编码读取文件.
private static void testReadFile(File file) throws IOException {
FileInputStream fis = new FileInputStream(file);
InputStreamReader ins = new InputStreamReader(fis);
int len = 0;
while ((len = ins.read()) != -1) {
System.out.print((char) len);
}
ins.close(); }
// 该方法适合用指定编码读取文件
private static void testReadFile(File file, String encod)
throws IOException {
FileInputStream fis = new FileInputStream(file);
InputStreamReader ins = new InputStreamReader(fis, encod);
int len = 0;
while ((len = ins.read()) != -1) {
System.out.print((char) len);
} ins.close();
} }

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

MicrosoftInternetExplorer4

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}

InputStreamReader:字节到字符的桥梁。

OutputStreamWriter:字符到字节的桥梁。

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

MicrosoftInternetExplorer4

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}
table.MsoTableGrid
{mso-style-name:网格型;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-unhide:no;
border:solid windowtext 1.0pt;
mso-border-alt:solid windowtext .5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-border-insideh:.5pt solid windowtext;
mso-border-insidev:.5pt solid windowtext;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.0pt;
font-family:"Times New Roman",serif;}

它们有转换作用,而本身又是字符流。所以在构造的时候,需要传入字节流对象进来。

构造函数:

InputStreamReader(InputStream)

通过该构造函数初始化,使用的是本系统默认的编码表GBK。

InputStreamReader(InputStream,String charSet)

通过该构造函数初始化,可以指定编码表。

OutputStreamWriter(OutputStream)

通过该构造函数初始化,使用的是本系统默认的编码表GBK。

OutputStreamWriter(OutputStream,String charSet)

通过该构造函数初始化,可以指定编码表。

注意:

操作文件的字符流对象是转换流的子类。

Reader
|--InputStreamReader
|--FileReader
Writer
|--OutputStreamWriter
|--FileWriter

注意:

在使用FileReader操作文本数据时,该对象使用的是默认的编码表。

如果要使用指定编码表时,必须使用转换流。

如果系统默认编码是GBK的:

FileReader fr = new FileReader("a.txt");//操作a.txt的中的数据使用的本系统默认的GBK。

操作a.txt中的数据使用的也是本系统默认的GBK。

InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));

这两句的代码的意义相同。

但是:如果a.txt中的文件中的字符数据是通过utf-8的形式编码。使用FileReader就无能为力,那么在读取时,就必须指定编码表。那么转换流必须使用。

InputStreamReader isr =new InputStreamReader(new FileInputStream("a.txt"),"utf-8");

java IO之 编码 (码表 编码 解码 转换流)的更多相关文章

  1. Java IO学习笔记(三)转换流、数据流、字节数组流

    转换流 1.转换流:将字节流转换成字符流,转换之后就可以一个字符一个字符的往程序写内容了,并且可以调用字符节点流的write(String s)方法,还可以在外面套用BufferedReader()和 ...

  2. 1.java.io包中定义了多个流类型来实现输入和输出功能,

    1.java.io包中定义了多个流类型来实现输入和输出功能,可以从不同的角度对其进行分 类,按功能分为:(C),如果为读取的内容进行处理后再输出,需要使用下列哪种流?(G)   A.输入流和输出流 B ...

  3. java io 学习笔记(三) 字符流读写

    1.字符流读取 字符流读取的所有类都是从Reader这个超类继承的,都是用于读取字符的,这些类分别是InputSteamReader(从字符流读取).FileReader(继承与InputStream ...

  4. Java IO学习笔记(五)对象流

    1.Object流:直接将Object写入或读出. 2.序列化:将Object直接转化成字节流写到硬盘或网络上. 3.如果想把一个对象转化成字节流,该对象的实体类必须得实现Serializable接口 ...

  5. Java IO学习笔记(四)打印流

    1.只有输出流才有打印流:PrintWriter和PrintStream分别针对字符和字节,提供了重载的print,Println方法用于多种数据类型的输出.PrintWriter和PrintStre ...

  6. Java IO学习笔记(二)缓冲流

    处理流:包在别的流上的流,可以对被包的流进行处理或者提供被包的流不具备的方法. 一.缓冲流:套接在相应的节点流之上,带有缓冲区,对读写的数据提供了缓冲的功能,提高读写效率,同时增加一些新的方法.可以减 ...

  7. 系统学习 Java IO (五)----使用 SequenceInputStream 组合多个流

    目录:系统学习 Java IO---- 目录,概览 SequenceInputStream 可以将两个或多个其他 InputStream 合并为一个. 首先,SequenceInputStream 将 ...

  8. Java IO流详解(六)——转换流

    转换流也是一种处理流,它提供了字节流和字符流之间的转换.在Java IO流中提供了两个转换流:InputStreamReader 和 OutputStreamWriter,这两个类都属于字符流.其中I ...

  9. java:IO流(处理流(缓冲流,转换流,数据流),对象的序列化,Properties)

    字节缓冲流:(BufferedInputStream,BufferedOutStream) *按照流的功能来分:节点流和处理流 *节点流可以直接操作数据源: *InputStream *--FileI ...

随机推荐

  1. 《HelloGitHub》第 14 期

    公告 欢迎通过在 GitHub 上新建 issues 方式推荐项目,我真心希望读者可以在 HelloGItHub,找到真正的编程乐趣! <HelloGitHub>第 14 期 兴趣是最好的 ...

  2. IPv6启动五年后,距离我们究竟还有多远?

    作者:RicardoIPv6拥有更好的IP拓展性,更高的安全保障以及更快的传输速度,互联网协会将2012年6月6日定为了世界IPv6启动日,距此5年后,国内外Cloudflare.又拍云等CDN服务已 ...

  3. 搭建arm交叉工具链

    1.将arm-linux-gcc-4.4.3压缩包,拷到home/armtoolchain下,进行压缩. 2.压缩命令:tar -xzvf arm-linux-gcc-4.4.3.tgz,解压后得到了 ...

  4. javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  5. 利用document的readyState去实现页面加载中的效果

    打开新的网页时,为了增强友好性体验,告知用户网页正在加载数据需要呈现一个"页面加载中"之类的提示,只需要利用document就可以实现. 实现示例代码如下: <style&g ...

  6. cms基本概念(dedecms,phpcms)

    1.什么是cms? cms是"Content Management System"的缩写,意为"内容管理系统". 内容管理系统是企业信息化建设和电子政务的新宠, ...

  7. C# 计时器写法

        刚才一个交流群里有人问计时器怎么写,正好我也不太熟,就写了个demo,和大家分享一下这个是参考师傅的写的! 计时器有好多种写法,这里给大家推荐一个性能比较好的,用dispatchertimer ...

  8. Spring mvc 中使用 kaptcha 验证码

    生成验证码的方式有很多,个人认为较为灵活方便的是Kaptcha ,他是基于SimpleCaptcha的开源项目.使用Kaptcha 生成验证码十分简单并且参数可以进行自定义.只需添加jar包配置下就可 ...

  9. twisted学习之reactor

    reactor是twisted框架里面一个很重要的抽象,它为我们实现了循环,所以我们不用再去实现循环了. reactor有如下特点: 1.reactor循环会一致运行下去,可以使用Ctrl+C或者相关 ...

  10. ClistCtrl用法及总结(由怎样隐藏ListCtrl列表头的排序小三角形这个bug学习到的知识)

    1 怎样隐藏ListCtrl列表头的排序小三角形 在创建控件是加入|LVS_NOSORTHEADER风格即可. 一下是用法总结: 本文根据本人在项目中的应用,来谈谈CListCtrl的部分用法及技巧. ...