unicode规范中有一个bom的概念。bom——byte order mark,就是字节序标记。
在这里找到一段关于bom的说明:在ucs 编码中有一个叫做"zero width no-break space"的字符,它的编码是feff。而fffe在ucs中是不存在的字符,所以不应该出现在实际传输中。ucs规范建议我们在传输字节流前,先传输 字符"zero width no-break space"。这样如果接收者收到feff,就表明这个字节流是big-endian的;如果收到fffe,就表明这个字节流是little- endian的。因此字符"zero width no-break space"又被称作bom。 utf-8不需要bom来表明字节顺序,但可以用bom来表明编码方式。字符"zero width no-break space"的utf-8编码是ef bb bf。所以如果接收者收到以ef bb bf开头的字节流,就知道这是utf-8编码了。
但是处理中文时需要注意
1.处理 inputstream 不要用stringbufferinputstream 它已经过时 而且还有问题
最好使用 bytearrayinputstream 并指定编码
例如 inputstream=new bytearrayinputstream(strxml.getbytes("utf-8"));
2.fusionchart自己本身的要求了, 在输出自己的流数据之前
先输出bom
response.setcontenttype( "text/xml; charset=utf-8" );
outputstream outs = response.getoutputstream();
outs.write( new byte[]{(byte)0xef, (byte)0xbb, (byte)0xbf} );
//自己的输出
在这里找到一段关于bom的说明:在ucs 编码中有一个叫做"zero width no-break space"的字符,它的编码是feff。而fffe在ucs中是不存在的字符,所以不应该出现在实际传输中。ucs规范建议我们在传输字节流前,先传输 字符"zero width no-break space"。这样如果接收者收到feff,就表明这个字节流是big-endian的;如果收到fffe,就表明这个字节流是little- endian的。因此字符"zero width no-break space"又被称作bom。 utf-8不需要bom来表明字节顺序,但可以用bom来表明编码方式。字符"zero width no-break space"的utf-8编码是ef bb bf。所以如果接收者收到以ef bb bf开头的字节流,就知道这是utf-8编码了。
但是处理中文时需要注意
1.处理 inputstream 不要用stringbufferinputstream 它已经过时 而且还有问题
最好使用 bytearrayinputstream 并指定编码
例如 inputstream=new bytearrayinputstream(strxml.getbytes("utf-8"));
2.fusionchart自己本身的要求了, 在输出自己的流数据之前
先输出bom
response.setcontenttype( "text/xml; charset=utf-8" );
outputstream outs = response.getoutputstream();
outs.write( new byte[]{(byte)0xef, (byte)0xbb, (byte)0xbf} );
//自己的输出