在Java中,String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如
byte[] b_gbk = "中".getBytes("GBK");
byte[] b_utf8 = "中".getBytes("UTF-8");
byte[] b_iso88591 = "中".getBytes("ISO8859-1");
将分别返回“中”这个汉字在GBK、UTF-8和ISO8859-1编码下的byte数组表示,此时b_gbk的长度为2,b_utf8的长度为3,b_iso88591的长度为1。
而与getBytes相对的,可以通过new String(byte[], decode)的方式来还原这个“中”字时,这个new String(byte[], decode)实际是使用decode指定的编码来将byte[]解析成字符串。
String s_gbk = new String(b_gbk,"GBK");
String s_utf8 = new String(b_utf8,"UTF-8");
String s_iso88591 = new String(b_iso88591,"ISO8859-1");
通过打印s_gbk、s_utf8和s_iso88591,会发现,s_gbk和s_utf8都是“中”,而只有s_iso88591是一个不认识 的字符,为什么使用ISO8859-1编码再组合之后,无法还原“中”字呢,其实原因很简单,因为ISO8859-1编码的编码表中,根本就没有包含汉字 字符,当然也就无法通过"中".getBytes("ISO8859-1");来得到正确的“中”字在ISO8859-1中的编码值了,所以再通过new String()来还原就无从谈起了。
因此,通过String.getBytes(String decode)方法来得到byte[]时,一定要确定decode的编码表中确实存在String表示的码值,这样得到的byte[]数组才能正确被还原。
有时候,为了让中文字符适应某些特殊要求(如http header头要求其内容必须为iso8859-1编码),可能会通过将中文字符按照字节方式来编码的情况,如
String s_iso88591 = new String("中".getBytes("UTF-8"),"ISO8859-1"),这样得到的s_iso8859-1字符串实际是三个在 ISO8859-1中的字符,在将这些字符传递到目的地后,目的地程序再通过相反的方式String s_utf8 = new String(s_iso88591.getBytes("ISO8859-1"),"UTF-8")来得到正确的中文汉字“中”。这样就既保证了遵守协 议规定、也支持中文。
来自:http://www.blogjava.net/thisliy/archive/2009/12/09/305313.html
分享到:
相关推荐
public static string Encode(string data) { byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); ...
C#中char[]与string之间的转换可以通过使用ToCharArray()方法、string类的构造函数、StringBuilder的Append方法和string.Concat方法等方式来实现。同时,我们也可以使用Encoding类来将byte[]转换成string。
newString = newString.Substring(0, newString.Length - 1); } int byteLength = newString.Length / 2; byte[] bytes = new byte[byteLength]; for (int i = 0; i ; i++) { string hex = new String(new ...
string str1 = new string(arr); 2、byte[]与string之间的转化 string str = 你好,hello; byte[] bytes; //byte[] 转换成 string bytes = Encoding.UTF8.GetBytes(str); //string 转换成 byte[] (字符串是用哪种...
newString = newString.Substring(0, newString.Length - 1); } int byteLength = newString.Length / 2; byte[] bytes = new byte[byteLength]; string hex; int j = 0; for (int i = 0; i < newString....
String str3 = new String(buf3,"ISO8859-1");//错误解码 //编码解码4:错误编码正确解码 String str4 = "你好"; byte[] buf4 = str4.getBytes("ISO8859-1");//错误编码 String str4 = new String(buf4,"GBK")...
byte writeStringToBytes[] = writeString.getBytes(); byte temp[] = new byte[tempLength]; //需要几次写入 if(writeStringToBytes.length%tempLength==0) each = writeStringToBytes.length/...
public static string Encrypt(string Text,string sKey) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); byte[] inputByteArray; inputByteArray=Encoding.Default.GetBytes...
Des加密解密C#源码,很实用 byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8)); byte[] rgbIV = Encoding.ASCII.GetBytes(kesVector);... return Convert.ToBase64String(mStream.ToArray());
byte[] returnBytes = new byte[hexString.Length / 2]; for (int i = 0; i < returnBytes.Length; i++) returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); return returnBytes; } ``` ###...
String(request.getParameter("subject").getBytes("ISO-8859-1")); String str_content=new String(request.getParameter("content").getBytes("ISO-8859-1")); Properties props=new Properties(); props.put(...
String plainText = new String(decodedBytes); // 将解码后的字节转换回字符串 System.out.println("明文: " + plainText); } } ``` 接下来,我们讨论Base64加密成Java密文的过程。这里的“加密”可能指的是...
byte[] imageByte = new byte[dr.GetBytes(0, 0, null, 0, int.MaxValue)]; dr.GetBytes(0, 0, imageByte, 0, imageByte.Length); MemoryStream imageStream = new MemoryStream(imageByte); Image image = ...
if (string.IsNullOrEmpty(targetValue)) { return string.Empty; } var returnValue = new StringBuilder(); var des = new DESCryptoServiceProvider(); byte[] inputByteArray = Encoding.Default....
this.fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8"); } public String getContentDisposition() { return contentDisposition; } public void setContentDisposition(String ...
ByteArrayOutputStream baos = new ByteArrayOutputStream(hexString.length() / 2); for (int i = 0; i < hexString.length(); i += 2) { baos.write((hexString.indexOf(hexString.charAt(i)) | hexString....
IvParameterSpec zeroIv = new IvParameterSpec(VIPARA.getBytes()); SecretKeySpec key = new SecretKeySpec(dataPassword.getBytes(), "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); ...
string hashString = BitConverter.ToString(hashBytes).Replace("-", ""); ``` 在实际应用中,我们通常会结合这些加密技术,如使用RSA加密AES的密钥,再用AES加密大量数据,以提高安全性。此外,还需要注意密钥...
- 当使用`write(String.getBytes())`时,通过指定正确的编码方式(如`getBytes("GBK")`),可以确保字符正确转换为对应的字节序列。 2. **`RandomAccessFile`与文件系统的交互**: - `RandomAccessFile`类本身...
return new String(decryptedBytes, "UTF8"); } } ``` 这个Java类同样包含两个静态方法:`encrypt`用于加密,`decrypt`用于解密。与C#版本类似,我们使用ASCII编码获取前8个字节作为密钥和IV,并且使用Base64编码...