gpt4 book ai didi

java - JBuilder 2006 多种编码

转载 作者:太空宇宙 更新时间:2023-11-04 08:59:35 25 4
gpt4 key购买 nike

我刚刚在 Borland JBuilder 2006 中得到了一个我什至无法构建的项目。我有两个资源文件,一个是简体中文文本,另一个是繁体中文文本。当我尝试构建项目时,文本被误解,并且它看到“非法转义字符”。

现在,如果我在“项目”->“项目属性”->“常规”->“编码”中将编码设置为 GB2312,简体中文文本将正确显示。但繁体中文资源仍然是乱码。

我认为对于繁体中文,此设置应该设置为 Big5,但即使这样也不起作用。.当我将其设置为 Big5 时,简体中文就会损坏。

之前从事此工作的开发人员已经离开,没有机会向我展示如何构建这个项目..

有什么想法吗?

谢谢

克雷布

最佳答案

They're called "Res_SChinese.java" and "Res_TChinese.java"

我认为这些一定是 Java 类文件,但令我惊讶的是它们采用不同的编码。

拥有多种编码的源文件是非常不可取的。如果您不知道源文件的字符集是什么,可以使用 ICU project图书馆来帮助你 guess :

  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();
}
}

请注意,它可以检测到的中文字符编码的数量是有限的( ISO-2022-CN, GB18030 and Big5 ),但至少它可以帮助您找出所有内容是否只是以 Unicode 转换格式或其他方式编码。

<小时/>

Eclipse(JBuilder 现在是基于 Eclipse 的,不是吗?)可以为单个文件设置编码。您可以通过右键单击文件并选择“属性”来设置 Eclipse 对文件使用的编码。编码位于资源属性下。这很难管理,并且不适用于您使用的任何外部工具(例如 Ant 构建脚本)。

可以使用外部使用不同的编码来编译文件。例如:

javac -encoding GB18030 Foo.java

但是如果这些类具有相互依赖性,那很快就会变得痛苦。

<小时/>

面对多种编码,我会将所有文件转换为单一编码。这里有几个选项。

使用 Latin-1 子集

Java 支持源文件中的 Unicode 转义序列。因此,Unicode 字符 U+6874 桴 可以写成文字\u6874。 JDK工具native2ascii可用于将 Java 文件转换为 Latin-1 值。

native2ascii -encoding GB2312 FooIn.java FooOut.java

生成的文件可能在任何地方编译都没有问题,但对于任何阅读/编辑文件的人来说可能是一场噩梦。

使用GB18030

GB18030是一个巨大的字符集,因此如果这是您的 native 编码,那么使用它可能是一个主意(否则,如果我要走这条路,我会使用 UTF-8)。

您可以使用这样的代码来执行转换:

  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);
}
}
<小时/>

If I open them in Notepad, i can view them both properly even with just the locale set to Chinese (PRC)

记事本使用启发式字符 encoding detection机制。 It doesn't always work .

关于java - JBuilder 2006 多种编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1152612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com