Java 字符集和 Windows

标签 java windows

我有一个 Java 程序,它在外部进程中运行 msinfo32.exe(系统信息),然后读取 msinfo32.exe 生成的文件内容。当Java程序将文件内容加载到String中时,String中的字符是不可读的。为了使字符串可读,我必须使用 String(byte[] bytes, String charsetName) 创建字符串并将 charsetName 设置为 UTF-16。但是,当在 Windows2003 的一个实例上运行时,只有 UTF-16LE(小端)会产生可打印的字符串。

我怎样才能提前知道要使用哪种字符编码?

此外,如果您能提供有关此主题的任何背景信息,我们将不胜感激。

最佳答案

某些 Microsoft 应用程序使用 byte-order mark指示 Unicode 文件及其字节顺序。我可以在我的 Windows XP 机器上看到导出的 .NFO 文件以 0xFFFE 开头,因此它是小端。

FF FE 3C 00 3F 00 78 00 6D 00 6C 00 20 00 76 00         __<_?_x_m_l_ _v_
65 00 72 00 73 00 69 00 6F 00 6E 00 3D 00 22 00         e_r_s_i_o_n_=_"_
31 00 2E 00 30 00 22 00 3F 00 3E 00 0D 00 0A 00         1_._0_"_?_>_____
3C 00 4D 00 73 00 49 00 6E 00 66 00 6F 00 3E 00         <_M_s_I_n_f_o_>_
0D 00 0A 00 3C 00 4D 00 65 00 74 00 61 00 64 00         ____<_M_e_t_a_d_

此外,我建议您改用 Reader用于解码文件的实现而不是 String 构造函数;这有助于避免您读取半个字符的问题,因为它被截断了,因为它位于字节数组的末尾。

关于Java 字符集和 Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/457655/

相关文章:

python - 无法在 Windows/MSYS2 下从 bash 脚本运行 MATLAB

windows - ngrok 从 Windows 7 命令行杀死隧道

c# - 类型 'System.IDisposable' 在未引用的程序集中定义

python - 从 Cygwin 启动 python IDLE 时 Tkinter 中的 tcl_error

c++ - Windows 上的 Qt 5.1.0 使用 minGW 4.8 需要很长时间来调试

java - Play Framework : merge action only works in the Controller that triggered it

java - Android JodaTime dateTimeFormatter 并不总是返回 UTC 时间

java - 仅在 out 文件夹和 gradle 运行中无法识别资源

java - 以智能方式取消计算线程

java - 如何登录jsf