我有以下代码,但我希望它写为UTF-8文件来处理外来字符.有没有办法做到这一点,是否需要有一个参数?
我非常感谢你对此的帮助.谢谢.
try {
BufferedReader reader = new BufferedReader(new FileReader("C:/Users/Jess/My Documents/actresses.list"));
writer = new BufferedWriter(new FileWriter("C:/Users/Jess/My Documents/actressesFormatted.csv"));
while( (line = reader.readLine()) != null) {
//If the line starts with a tab then we just want to add a movie
//using the current actor's name.
if(line.length() == 0)
continue;
else if(line.charAt(0) == '\t') {
readMovieLine2(0, line, surname.toString(), forename.toString());
} //Else we've reached a new actor
else {
readActorName(line);
}
}
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 我想知道将我的文件编码设置为UTF-8的Java虚拟机(JVM)属性的价值是什么.
我放-Dfile.encoding=UTF8或-Dfile.encoding=UTF-8?
UTF-8是Java中的默认编码吗?
如果没有,我怎么知道默认使用哪种编码?
我的Windows默认编码是GBK,我的Eclipse完全是utf-8编码的.
因此,在我的Eclipse中运行良好的应用程序崩溃,因为在导出为jar文件时单词变得不可读;
我必须在.bat文件中编写以下行来运行该应用程序
start java -Dfile.encoding=utf-8 -jar xxx.jar
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,我可以在源代码中编写一些内容来设置应用程序使用(或jvm运行)utf-8而不是系统的默认编码.
一些遗留代码依赖于平台的默认字符集进行翻译.对于"西方世界"中的Windows和Linux安装,我知道这意味着什么.但是考虑到俄罗斯或亚洲平台,我完全不确定他们平台的默认字符集是什么(只是UTF-16?).
因此,我想知道执行以下代码行时会得到什么:
System.out.println("Default Charset=" + Charset.defaultCharset());
Run Code Online (Sandbox Code Playgroud)
编辑: 我不想在这里讨论charsets的问题及其与unicode的区别.我只是想收集哪些操作系统将导致什么特定的字符集.请仅发布具体值!
在我的application.properties添加一些自定义属性.
custom.mail.property.subject-message=This is a ä ö ü ß problem
Run Code Online (Sandbox Code Playgroud)
在这个类中,我有自定义属性的表示.
@Component
@ConfigurationProperties(prefix="custom.mail.property")
public class MailProperties {
private String subjectMessage;
public String getSubjectMessage() {
return subjectMessage;
}
public void setSubjectMessage(String subjectMessage) {
this.subjectMessage = subjectMessage;
}
Run Code Online (Sandbox Code Playgroud)
在这里我用我的MailProperties:
@Service
public class SimpleUnknownResponseMessage extends MailProperties implements UnknownResponseMessage{
private JavaMailSender javaMailSender;
@Autowired
public SimpleUnknownResponseMessage(JavaMailSender javaMailSender) {
this.javaMailSender = javaMailSender;
}
@Override
public void placeUnknownResponse(BookResponse bookResponse) {
MimeMessage message = javaMailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, "UTF-8");
helper.setSubject(this.getSubjectMessage());
javaMailSender.send(message); …Run Code Online (Sandbox Code Playgroud) 我在Windows 7中使用tomcat 6.0.32.在一个非常简单的servlet中,在init方法中,我正在打印:
System.out.println(Charset.defaultCharset());
Run Code Online (Sandbox Code Playgroud)
输出是:
windows-1253
Run Code Online (Sandbox Code Playgroud)
据我所知,这是tomcat在JVM中的启动方式,因为我在独立的java类中打印相同的内容,并将"UTF8"作为响应.
那么,我怎样才能将其更改为UTF-8?
谢谢
在使用Oracle的Java 7时,我在使用File.list()时遇到问题,文件名在Mac OS X上错误地检索到了非ASCII字符.
我使用以下示例:
import java.io.*;
import java.util.*;
public class ListFiles {
public static void main(String[] args)
{
try {
File folder = new File(".");
String[] listOfFiles = folder.list();
for (int i = 0; i < listOfFiles.length; i++)
{
System.out.println(listOfFiles[i]);
}
Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
System.out.format("%s=%s%n",
envName,
env.get(envName));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用Apple的Java 6运行此示例,一切都很好:
....
Folder-ÄÖÜäöüß
??.txt
....
Run Code Online (Sandbox Code Playgroud)
使用Oracle的Java 7运行此示例,结果如下:
....
Folder-A??O??U??a??o??u????
??????.txt
....
Run Code Online (Sandbox Code Playgroud)
但是,如果我按如下方式设置环境(在上述两种情况下未设置):
LANG=en_US.UTF-8 …Run Code Online (Sandbox Code Playgroud) 下面是我的代码,它打算带两个.ckl文件,比较两个,添加新项目并创建一个新的合并文件.程序在Netbeans中运行时正确执行,但是,当执行.jar时,程序似乎没有以UTF-8编码文件.我对编程很陌生,想知道我可能需要在哪里或如何强制执行这种编码?
**我已经删除了Swing代码和其他行,因此只显示了我的方法,即执行所有比较和合并的方法.
public void mergeFiles(File[] files, File mergedFile) {
ArrayList<String> list = new ArrayList<String>();
FileWriter fstream = null;
BufferedWriter out = null;
try {
fstream = new FileWriter(mergedFile, false);
out = new BufferedWriter(fstream);
} catch (IOException e1) {
e1.printStackTrace();
}
// Going in a different direction. We are using a couple booleans to tell us when we want to copy or not. So at the beginning since we start
// with our source file we set copy to true, we …Run Code Online (Sandbox Code Playgroud) public static void main(String[] args)
{
int i=153;
int j=63;
System.out.println((char)i);
System.out.println((char)j);
}
OUTPUT:-
?
?
Run Code Online (Sandbox Code Playgroud)
我有一些想法为什么这个奇怪的输出..但任何人都可以给我一些想法,以便我也可以打印扩展的ASCII ...