字符编码,求科普
一直对编码的各种东西都很迷,打个比方吧,一个swf格式的文件,我用文本文档打开,肯定是乱七八糟的吧,我用另存为保存为UTF-8格式,然后再次用文本文档打开再保存城ASNI格式,这个时候这个swf文件基本就打不开了,我想知道这中间发生了什么都。才会导致文件变得不可用!通俗点哈!--------------------编程问答-------------------- 文件最终都是使用二进制保存,但是保存的时候有两种方式,使用文本还是直接是二进制。
swf保存的是二进制,你用文本的方式去查看,当然不一样。
例如一个整数12345678,如果以二进制保存,保存后的文件对这个数的表示的二进制的整数值就是12345678,只占用八个字节,但是如果使用文本的方式保存,12345678这个整数被表示成8个字符,他们在保存的文件中占用8个字节,完全是不是一回事。 --------------------编程问答-------------------- 这里有2个问题。
第1个问题是不同的字符集之间编码空间是不同的,对于编码空间之外的东东,系统会用某一个空间内字符来代替它。譬如如果用ASCII码来保存一个中文文档,文档里面的汉字可能会被自动转码为问号"?",文件内容自然也就发生变化了。
第2个问题是同一个字符在不同字符集之间的编码也是不同的。比如说"你",在GB2312中的编码是C4E3,而在UTF8中的编码是604F。
所以除非是纯Ascii文件,否则经过转码后保存的文件和原来的文件总是有一些不同的,那么原来你那个用的swf文件转码后变得不能用也是在情理之中的。 --------------------编程问答--------------------
嗯,UTF-8不是可以表示所有字符么,我把字节数组转换为字符串的时候用的是UTF-8,然后我把字符串通过getBytes("UTF-8")得到字节数组应该和我原先的字节数组一样啊。。 --------------------编程问答-------------------- UTF8可以表示所有的字符,而非任何一个2进制byte。
另外,你把文件以UTF8打开再存成ANSI格式,这个时候ASCII码之外的字符就改变了。
LZ可以用任何一种可显示2进制的编辑器打开转码前的swf,转码为UTF8的文本文件,以及2次转码为ANSI的文本文件,看看他们的2进制表示有什么区别。
补充:Java , Java SE