Pergunta

Eu só tenho um projeto em Borland JBuilder 2006, que eu não posso mesmo construir. Eu tenho dois arquivos de recursos, um com texto chinês simplificado e outro em chinês tradicional. Quando eu tento construir o projeto do texto é mal interpretado e que vê um "caractere de escape ilegal".

Agora, se eu definir a codificação no projeto -> Propriedades do Projeto -> Geral -> Codificação para GB2312, o texto mostra Chinês simplificado corretamente. No entanto, o recurso tradicional chinesa ainda é ilegível.

Eu acho que para chinês tradicional, essa configuração deve ser definido como Big5, mas mesmo isso não funcionar .. E quando eu defini-lo para Big5, em seguida, chinês simplificado fica corrompido.

O desenvolvedor anterior que estava trabalhando neste tinha deixado sem ter a chance de me mostrar como construir esse projeto ..

Todas as idéias?

Obrigado,

kreb

Foi útil?

Solução

Eles são chamados de "Res_SChinese.java" e "Res_TChinese.java"

Eu assumo que estes devem ser arquivos de classe Java, embora eu estou surpreso que eles estão em diferentes codificações.

Tendo arquivos de origem em várias codificações é altamente indesejável. Se você não sabe o conjunto de caracteres de um arquivo de origem tem, você pode usar bibliotecas do href="http://site.icu-project.org/" rel="nofollow noreferrer"> projeto UTI para ajudá-lo palpite :

  public static void main(String[] args) throws IOException {
    InputStream file = new FileInputStream(args[0]);
    try {
      file = new BufferedInputStream(file);
      CharsetDetector detector = new CharsetDetector();
      detector.setText(file);
      String tableTemplate = "%10s %10s %8s%n";
      System.out.format(tableTemplate, "CONFIDENCE",
          "CHARSET", "LANGUAGE");
      for (CharsetMatch match : detector.detectAll()) {
        System.out.format(tableTemplate, match
            .getConfidence(), match.getName(), match
            .getLanguage());
      }
    } finally {
      file.close();
    }
  }

Note que o número de codificação de caracteres chineses que pode detectar é limitada ( ISO-2022-CN , GB18030 e Big5 ), mas pelo menos ele pode ajudá-lo a descobrir se tudo está apenas codificado em um formato de transformação Unicode ou algo assim.


Eclipse (JBuilder é Eclipse-based agora, não é?) Pode definir codificações para arquivos individuais. Você pode definir a codificação usos Eclipse para um arquivo de propriedades botão direito do mouse e selecionando. A codificação está sob as propriedades de recursos. este é difícil de gerir e não se aplicam a todas as ferramentas externas que você usa (como um script de construção Ant).

É possível compilar arquivos usando uma codificação diferente usando externo. Por exemplo:

javac -encoding GB18030 Foo.java

Mas, se essas classes têm interdependências, que está indo para obter rápido doloroso.


Diante de várias codificações, gostaria de traduzir todos os arquivos para uma única codificação. Há um par de opções aqui.

Use a Latin-1 subconjunto

Java suporta seqüências de escape Unicode em arquivos de origem. Assim, o caractere Unicode U + 6874 ? pode ser escrito como a literal \ u6874. A ferramenta JDK native2ascii pode ser usado para transformar seus arquivos Java para Latin-1 valores.

native2ascii -encoding GB2312 FooIn.java FooOut.java

Os arquivos resultantes provavelmente compilar em qualquer lugar sem problema, mas pode ser um pesadelo para a leitura ninguém / editar os arquivos.

Use GB18030

GB18030 é um conjunto de caracteres enormes, por isso, se este é sua codificação nativa, pode ser uma idéia para usar esse (caso contrário, se eu estava indo por este caminho, eu ia usar UTF-8).

Você pode usar o código como este para executar a transformação:

  public static void main(String[] args) throws IOException {
    changeEncoding("in_cn.txt", Charset.forName("GBK"),
        "out_cn.txt", Charset.forName("GB18030"));
  }

  private static void changeEncoding(String inFile,
      Charset inCharset, String outFile, Charset outCharset)
      throws IOException {
    InputStream in = new FileInputStream(inFile);
    Reader reader = new InputStreamReader(in, inCharset);
    OutputStream out = new FileOutputStream(outFile);
    Writer writer = new OutputStreamWriter(out, outCharset);
    copy(reader, writer);
    writer.close();
    reader.close();
    // TODO: try/finally blocks; proper stream handling
  }

  private static void copy(Reader reader, Writer writer)
      throws IOException {
    char[] cbuf = new char[1024];
    while (true) {
      int r = reader.read(cbuf);
      if (r < 0) { break; }
      writer.write(cbuf, 0, r);
    }
  }

Se eu abri-los no bloco de notas, eu posso vê-los tanto corretamente, mesmo com apenas o conjunto locale para Chinês (PRC)

Notepad usa um caractere heurística codificação de detecção mecanismo. Ela nem sempre funciona .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top