我正在尝试显示与 unicode 0x95E8 对应的字形。
该代码点基本上是 CJK 块(中文、日语、韩语)。
我很难知道这个特定代码点的字形表示对于日语和中文是否可能不同。
当我在 JTextArea 中显示 U+95E8 时,我能够在 linux/windows 上看到“门”字符。
但是当我尝试在我的“嵌入式设备”中显示相同的代码点时。显示的字符变为。
我想知道这个代码点 U+95E8 在所有 CJK(中文、日文、韩文)语言环境中是否应该具有统一的表示形式,或者对于其中一些语言环境是否应该有所不同。这种现象是否是因为不同设备安装的字体不同所致?我为我的无知感到抱歉,但我不太热衷于国际化。
import java.awt.*;
import java.awt.event.*;
import java.util.Locale;
import javax.swing.*;
public class TextDemo extends JPanel implements ActionListener {
public TextDemo() {
}
public void actionPerformed(ActionEvent evt) {
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event dispatch thread.
* @throws InterruptedException
*/
private static void createAndShowGUI() throws InterruptedException {
JFrame frame = new JFrame(java.util.Locale.getDefault().getDisplayName());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = frame.getContentPane();
contentPane.setLayout(new SpringLayout());
Dimension size = new Dimension(500, 500);
frame.setSize(size);
JTextArea textArea = new JTextArea();
//Font font1 = new Font("SansSerif", Font.BOLD, 20);
//textArea.setFont(font1);
textArea.setEditable(true);
textArea.setSize(new Dimension(400,400));
textArea.setDefaultLocale(java.util.Locale.SIMPLIFIED_CHINESE);
textArea.setText("Printing U+95E8 : \u95e8");
contentPane.add(textArea);
frame.setVisible(true);
}
public static void main (String[] args) {
java.util.Locale.setDefault(java.util.Locale.JAPANESE);
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
createAndShowGUI();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}
添加到 Jukka 的答案:
以下是有关“汉统”的更多信息:http://en.wikipedia.org/wiki/Han_unification http://en.wikipedia.org/wiki/Han_unification
有两种主要方法可以呈现所需的字形:
- Use a locale-specific font (means different fonts for Chinese Traditional, Chinese Simplified, Japanese, Korean). The designers of such fonts take care to do the right thing. This is Jukka's answer.
As an example you can take a look at the Noto family of fonts (http://www.google.com/get/noto/cjk.html http://www.google.com/get/noto/cjk.html).
Download the "Language specific fonts in OTF" files:
- 简体中文字体是NotoSansHans-Regular.otf
- 繁体中文字体为NotoSansHant-Regular.otf
- 日语字体是 NotoSansJP-Regular.otf
- 韩文字体是 NotoSansKR-Regular.otf
- 使用具有多个特定于区域设置的字形的通用 CJK 字体。
例如,您可以再次使用 CJK Noto 字体,即“OTF 中的多语言字体”选项。
请参阅《脚本表和语言系统记录》http://www.microsoft.com/typography/otspec/chapter2.htm http://www.microsoft.com/typography/otspec/chapter2.htm。
但是要使用字体应该包含的信息,文本渲染引擎应该了解如何处理语言设置,并且 API 应该公开它。
现在,下面的东西水平非常低。
当您使用 JTextArea 之类的东西时,您无法控制。您可以使用 JTextArea 的实现者决定执行的操作。
您可以调用组件的 setDefaultLocale ,这可能会有所帮助。无论如何,建议您这样做。
但如果您想确定发生了什么,您可以控制并指定特定于语言的字体。
我怎样才能识别我的电脑中正确的字体/环境
导致打印“门”。
你不能可靠地做到这一点。 Java 下面的层可能会执行自己的后备操作。
而且您无法合法分发 Windows 字体。
这样我就可以在我的嵌入式设备中安装相同的字体
不。使用开源、优质的字体。 Noto 字体是一个非常好的选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)