Java 字符串到字节的转换和返回不返回相同的结果(ASCII)
在将字符串转换为字节后,将其转换回适当的值时遇到了一些问题 初始字符串:Java 字符串到字节的转换和返回不返回相同的结果(ASCII),java,arrays,string,ascii,string-conversion,Java,Arrays,String,Ascii,String Conversion,在将字符串转换为字节后,将其转换回适当的值时遇到了一些问题 初始字符串: "0000000000Y Yã" 其中“ã”只是一个字符值 转换代码: byte[] b = s.getBytes(StandardCharsets.US_ASCII); 但是,使用将其转换回时: String str = new String(b, StandardCharsets.US_ASCII); 我收到: "0000000000Y Y?"
"0000000000Y Yã"
其中“ã”只是一个字符值
转换代码:
byte[] b = s.getBytes(StandardCharsets.US_ASCII);
但是,使用将其转换回时:
String str = new String(b, StandardCharsets.US_ASCII);
我收到:
"0000000000Y Y?"
有人知道这是为什么吗
谢谢。这是因为
ã
不是ASCII字符。检查
用于有效的ASCII字符。这是因为
ã
不是ASCII字符。检查
对于有效的ASCII字符。
不是ASCII字符,因此实现给出了如何处理它
此方法始终使用此字符集的默认替换字节数组替换格式错误的输入和不可映射的字符序列
对于这个字符集,它显示为“?”ã
不是ASCII字符,因此它的处理方式由实现给出
此方法始终使用此字符集的默认替换字节数组替换格式错误的输入和不可映射的字符序列
对于这个字符集,它显示为“?”ã
不是US_ASCII字符集的一部分
getBytes()
方法记录如下:
此方法始终替换格式错误的输入和不可映射的字符
具有此字符集的默认替换字节数组的序列
(见附件)
对于US_ASCII,默认替换字节数组似乎是一个表示“?”字符的字节(ASCII代码0x3F)。这就是插入到字节数组中代替ã
字符的内容
当转换回字符串时
,将得到与替换字节对应的字符,即“?”字符
因此,如果您转换为字节,并且希望返回相同的字符,请确保使用包含要使用的每个字符的字符集。UTF-8将是一个安全的决定
如果您需要遵守某些字符编码(例如,因为某些外部接口需要这种编码),那么Java的替换策略是有意义的,但当然有些字符会丢失。ã
不是US_ASCII字符集的一部分
getBytes()
方法记录如下:
此方法始终替换格式错误的输入和不可映射的字符
具有此字符集的默认替换字节数组的序列
(见附件)
对于US_ASCII,默认替换字节数组似乎是一个表示“?”字符的字节(ASCII代码0x3F)。这就是插入到字节数组中代替ã
字符的内容
当转换回字符串时
,将得到与替换字节对应的字符,即“?”字符
因此,如果您转换为字节,并且希望返回相同的字符,请确保使用包含要使用的每个字符的字符集。UTF-8将是一个安全的决定
如果您需要遵守某些字符编码(例如,因为某些外部接口需要这种编码),那么Java的替换策略是有意义的,但当然有些字符会丢失