Java 校验和不';当计算字符串包含重音字符时不匹配
第一:我有一个包含重音字符的字符串 第二:我计算它的校验和Java 校验和不';当计算字符串包含重音字符时不匹配,java,checksum,Java,Checksum,第一:我有一个包含重音字符的字符串 第二:我计算它的校验和 private static String checkSumInStream(String Str, String checksumAlgorithm) throws Exception { InputStream stream = new ByteArrayInputStream(Str.getBytes()); MessageDigest digest = MessageDigest.getI
private static String checkSumInStream(String Str, String checksumAlgorithm) throws Exception
{
InputStream stream = new ByteArrayInputStream(Str.getBytes());
MessageDigest digest = MessageDigest.getInstance(checksumAlgorithm);
InputStream input = null;
StringBuffer sb = new StringBuffer();
try{
input = stream;
byte[] buffer = new byte[8192];
do {
int read = input.read(buffer);
if(read <= 0)
break;
digest.update(buffer, 0, read);
} while(true);
byte[] sum = digest.digest();
for (int i = 0; i < sum.length; i++) {
sb.append(Integer.toString((sum[i] & 0xff) + 0x100, 16).substring(1));
}
}catch(IOException io)
{
}finally{
if(input != null)
input.close();
}
return sb.toString();
}
private static String checkSumInStream(String Str,String checksum算法)引发异常
{
InputStream=新的ByteArrayInputStream(Str.getBytes());
MessageDigest=MessageDigest.getInstance(checksumAlgorithm);
InputStream输入=null;
StringBuffer sb=新的StringBuffer();
试一试{
输入=流;
字节[]缓冲区=新字节[8192];
做{
int read=输入.读取(缓冲区);
if(read如何将字符串写入文件?必须非常小心,以与从文件中读回字符串相同的方式执行此操作
就你而言:
OutputStream out = new FileOutputStream(myfile);
out.write(str.getBytes());
out.close();
然后它应该可以工作。但是您需要记住,当您写入文件时,str.getBytes()
不是一种安全的方法,因为它使用平台默认的字符编码。如果您将这样的文件发送到其他地方并在那里使用,您可能会用错误的编码将其读回
您的平台默认编码甚至可能不支持重音字符!(但是如果您以完全相同的方式写入和读取文件,那么您应该得到完全相同的结果,因此这不会是问题的原因)
最好使用UTF-8
字符编码。
无论您在哪里使用str.getBytes()
,如果您想避免捕获不支持的编码异常
,请将其替换为str.getBytes(“UTF-8”)
,或者str.getBytes(Charset.forName(“UTF-8”)
[即使每个Java实现都需要支持UTF-8编码。这很烦人…]假设您指的是IO流,而不是Java 8流,它们不包含字符,而是包含字节。另外,请发布您的代码。“我创建了一个流”:如何?我计算它的校验和:如何?代码
OutputStream out = new FileOutputStream(myfile);
out.write(str.getBytes());
out.close();