相关疑难解决方法(0)

如何在Java中打开包含重音符号的文件?

(编辑澄清并添加一些代码)

您好,我们需要解析来自世界各地的用户发送的数据.我们的Linux系统具有en_US.UTF-8的默认语言环境.但是,我们经常会在名称中接收带有变音符号的文件,例如" special_á_ã_è_characters.doc".虽然操作系统可以很好地处理这些文件,并且一个strace显示操作系统将正确的文件名传递给Java程序,但Java会弹出名称并抛出"找不到文件"io异常试图打开它们.

这个简单的程序可以说明问题:

import java.io.*;
import java.text.*;

public class load_i18n
{
  public static void main( String [] args ) {
    File actual = new File(".");
    for( File f : actual.listFiles()){
      System.out.println( f.getName() );
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在包含该文件special_á_ã_è_characters.doc和默认美国英语语言环境的目录中运行此程序可以:

special_�_�_�_characters.doc

通过export LANG = es_ES @ UTF-8设置语言正确打印出文件名(但这是一个不可接受的解决方案,因为整个系统现在以西班牙语运行.)如下所示,在程序中明确设置Locale也没有效果.下面我修改了程序a)尝试打开文件,b)打开文件时打印出ASCII和字节数组中的名称:

import java.io.*;
import java.util.Locale;
import java.text.*;

public class load_i18n
{
  public static void main( String [] args ) {
    // Stream to read file
    FileInputStream fin;

    Locale locale = new …
Run Code Online (Sandbox Code Playgroud)

java unicode character-encoding

13
推荐指数
2
解决办法
2万
查看次数

标签 统计

character-encoding ×1

java ×1

unicode ×1