最近我遇到了一个我记不起来的文件字符编码问题.在不同平台上运行时,必须了解文本文件的字符编码和编写正确处理编码的代码是很常见的.但我发现的问题是由与执行平台不同的平台上的编译引起的.这完全出乎意料,因为根据我的经验,当javac创建一个类文件时,重要的参数是java源和目标params,以及进行编译的JDK的版本.我的情况是,在Mac OS X上使用JDK 1.6.0_22编译的类与在Linux上运行时使用1.6.0_23-b05编译的类不同,在Mac OS X上运行时.指定的源和目标是1.4.
使用PrintStream println方法将在内存中编码为ISO-8859_1的String写入磁盘.根据Java代码编译的平台,字符串的编写方式不同.这导致了一个错误.该错误的修复是在写入和读取文件时明确指定文件编码.
让我感到惊讶的是,行为的不同取决于编译类的位置,而不是运行类的平台.我非常熟悉Java代码在不同平台上运行时的行为方式.但是,当在不同平台上编译的相同代码在同一平台上运行不同时,它有点可怕.
有没有人遇到过这个具体问题?对于在没有明确指定字符编码的情况下读取和写入字符串到文件的任何Java代码,似乎都不适用.这种情况经常发生多少次?
我正在编写一个Java项目,用附件发送电子邮件.
在我的测试用例中,我将一些日语单词"some Hiraganas and Katakanas"添加到我附加的testfile.txt(我用UTF-8编码保存.)
但是当我打开附加的测试文件后,我将测试邮件发送给自己. txt,每个日本人的Chars都变成了"????".
所以我只是想知道为什么会发生这种情况......?
谢谢
艾伦
PS更具体,这是我的代码.我正在使用mail.jar发送电子邮件.
以下是我获取文件的方法:
/**
* Add an attachment to the Email.
* @param filePath
*/
public void setFile(String filePath){
attachment = new File(filePath);
}
Run Code Online (Sandbox Code Playgroud)
以下是我如何将文件附加到我的MIME电子邮件部分.
/*Add attachment if an attachment is given.*/
if(attachment != null){
MimeBodyPart attachmentPart = new MimeBodyPart();
attachmentPart.attachFile(attachment);
multipart.addBodyPart(attachmentPart);
}
Run Code Online (Sandbox Code Playgroud)