java - 什么是非 unicode 应用程序

标签 java c operating-system

我们知道,在windows系统中,我们可以在“控制面板\时钟、语言和区域”中为非Unicode程序设置locale语言。但是本地语言对应用程序意味着什么?由于我的理解,应用程序是编译后的二进制可执行文件,其中只有机器码指令,没有数据,那么字符编码如何影响它们的运行?

一种猜测是,如果可执行文件在代码段中包含一些文字字符串,它将使用一些内部字符集对它们进行编码。如果字符集不是 unicode,那么它将显示垃圾。但是内部的Charset是不是固定的?就像在 Java 中一样,java 规范定义了内部编码是 UTF-16。

希望有人能回答我的问题,

谢谢。

最佳答案

Windows 有两种程序可以与之对话的方法,称为“ANSI API”和“Unicode API”,“非 Unicode 应用程序”是通过“ANSI API”而不是“非 Unicode 应用程序”与 Windows 对话的方法“Unicode API”。

这意味着应用程序传递给 Windows 的任何字符串都只是字节序列,而不是 Unicode 字符序列。 Windows 必须决定字节序列对应于哪些字符,而您正在谈论的控制面板设置就是它如何做到这一点。

因此,例如,在设置为使用 Windows Western 的 PC 上输出值为 0xE4 的字节的非 unicode 程序将显示字符 ä,而设置为希伯来语的程序将显示字符Д.

关于java - 什么是非 unicode 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3879756/

相关文章:

c - 当 fork() 处于某个条件时会发生什么?

c++ - 如果绝对或相对误差小于 10^(−6),您的答案将被视为正确

c - 调用 execv() 时动态分配的内存会发生什么?

java - 多语言应用程序问题

java - illegalargumentexception - 项目在 Netbeans 上运行但不作为 War 文件在 Tomcat 上运行

使用系统调用将一个文件的内容复制到另一个文件

c - 调试劣质进程

c - 小型机 : Determining size of process table

java - 关于最终重抛

Java 64 位 - 整数与短整型