- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试在我的 X Window
程序中使用 ISO-10646
固定字体。它必须支持英语、俄语和希腊字母,但事实并非如此。在 xfontsel
窗口中一切正常,但在我的程序中只有英语可以正确显示。使用类似 g++ -fexec-charset=ISO-10646 ...
或 g++ -finput-charset=ISO-10646 ...
的东西没有帮助。我该如何解决?
测试应用窗口截图:
xfontsel 窗口截图:
测试应用代码:
#include <X11/StringDefs.h>
#include <X11/Xaw/Command.h>
int main(int argc, char **argv) {
Widget widget = XtInitialize(argv[0], "simple", NULL, 0, &argc, argv);
XtVaCreateManagedWidget(
"English Русский ελληνικά", labelWidgetClass, widget,
XtNfont, XLoadQueryFont(XtDisplay(widget),
"-Misc-Fixed-Medium-R-Normal--20-200-75-75-C-100-ISO10646-1"
), XtNwidth, 500, XtNheight, 100, NULL
);
XtRealizeWidget(widget);
XtMainLoop();
}
最佳答案
您的程序使用 UTF-8 编码的单字节字符串,这不是 Xt/Xaw 所期望的。 -fexec-charset
没有任何帮助。
对于纯 Xlib(无工具包),您可以使用 Xutf8DrawString
和 friend ,但 Xt 和 Xaw 没有提供这些。
Xaw 理论上支持将 XtNencoding
设置为 XawTextEncodingChar2b
的标签的 2 字节编码,但我永远无法使其与 UTF-16 一起使用。
XChar2b lbl[] = { {0x04, 0x40}, {0x04, 0x43},
{0x04, 0x41}, {0x04, 0x41},
{0x04, 0x3a}, {0x04, 0x38},
{0x04, 0x39}, {0, 0}};
XtVaCreateManagedWidget(
"w00t", labelWidgetClass, widget,
XtNfont, XLoadQueryFont(XtDisplay(widget),
"-Misc-Fixed-Medium-R-Normal--20-200-75-75-C-100-ISO10646-1"
), XtNwidth, 500, XtNheight, 100,
XtNencoding, XawTextEncodingChar2b,
XtNlabel, lbl,
NULL
);
这个特定的字符串有效。我希望你能弄清楚如何生成任意标签。但是,高位或低位的空字节会终止字符串,因此无法使用此方法显示英文文本。
也许我机器上的 Xaw 拷贝不是最新的。有一个补丁可以让它工作 here但我不知道它是否适用于此拷贝,也懒得从源代码构建补丁版本。如果您想动态链接分发代码,也许您不应该依赖它,因为并非每台机器都有最新的 Xaw 库。这个补丁是在 2014 年制作的。
我的建议是不要依赖 Xaw 的国际化能力。将原始 X11 与 Xutf8DrawString
一起使用,或者使用 Qt、Gtk、FLTK 或 wxWidgets 等现代工具包,它们都可以与 UTF-8 无缝协作。作为最后的手段,根据需要子类化 Xaw 小部件并使它们与 Xutf8DrawString
一起工作。
更新 我已经检查了 Gentoo ebuild 的源代码,它应该是最新的。那里没有应用补丁,到处都是 strlen
,XChar2b
不工作。一个典型的 Xaw 代码片段:
len = strlen(label);
...
if (len) {
if (w->label.encoding)
XDrawString16(XtDisplay(gw), XtWindow(gw), gc,
w->label.label_x, y, (XChar2b *)label, len / 2);
else
XDrawString(XtDisplay(gw), XtWindow(gw), gc,
w->label.label_x, y, label, len);
}
显然这不可能有任何正确工作的希望。
关于c++ - ISO-10646 XFont 编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40123008/
我想知道是否可以通过 ISO 8583 做一个完整的声明(在一个日期范围之间),我看到 ATM 可以做完整的声明并且想知道他们使用什么方法。我知道余额查询和迷你报表可以在超过 8583 的 POS 设
我一直在尝试通过 7zip 和 WinRar 提取 ISO 镜像。 这是我使用的命令行: 7z x -y "%Isocontents%\ISO.iso" -o%Newfolder% WinRar.ex
我正在将 ICU 集成到一些内部软件中。我希望能够获取诸如“en_US”之类的字符串并为其获取脚本名称“Latin”。 (虽然最终我实际上想要一个 ICU ScriptCode。) 我尝试使用 ICU
我的数据位于一个数据框中,其结构如下: df2 <- data.frame(Year = c("2007"), Week = c(1:12), Measurement = c(rnorm(12, me
我需要计算一周分配到的年份。例如,2003 年 12 月 29 日被指定为 2004 年的第一周(我认为这仅适用于欧洲)。您可以使用以下代码来查看: SELECT DATEPART(isowk, '2
我想做什么? 我想提取 ISO 文件并编辑其中的文件,然后将其重新打包回 ISO 文件。 (正如你已经读过的) 我为什么要这样做? 我想开始修改 PSP ISO,为此我必须使用游戏资源、 Assets
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 2年前关闭。 Improve this questi
我有一个文件。在 Python 中,我想占用它的创建时间,并将其转换为 ISO time (ISO 8601) string 同时保留它是在 Eastern Time Zone 中创建的事实。 (美国
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我在二维网格上有两个标量场。我想为第一个标量场绘制一条等值线,并根据第二个标量场设置其不透明度。 我从 this SO answer 开始尝试使用 mayavi但我无法从 3D 切换到 2D。 下面是
假设您声明两个同构 showing :: (Read a, Show a) => Iso' String a showing = iso read show reading :: (Read a, S
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines准则。它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,
假设有一个两个字符的String,它应该代表ISO 639国家或语言名称。 你知道,Locale类有两个函数 getISOLanguages和 getISOCountries分别返回包含所有 ISO
实体中的值是否可以自由嵌入到 ISO 10303-21 格式的文件中? 在我看到的所有由 CAD 程序生成的示例中,length_measure 都嵌入在uncertainty_measure_wit
是否可以从原始 ISO 自动创建用于操作系统安装的 Vagrant .box 文件? 对我来说,Vagrant 提供的虚拟机上操作系统安装和配置的端到端自动化存在巨大差距。 当然,VagrantBox
有没有办法实现这样的格式: 2003-09-25T14:00:00.000+1000 or 2003-09-25T14:00:00.000+1100 要这样转换 2003-09-25T14:00:00
我正在使用: @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) @JsonFormat( pattern = "MM-dd-yyyy" ) private
我需要将 iso-3166-1/iso-3166-2 代码转换为经度/纬度 例子: 输入:“美国”,输出:(37.09024, -95.71289100000001)。 输入“VE-O”,输出:(10
我想转换 POSIX 语言环境名称,例如 en_US、de_DEISO-639-1 和 ISO-3166 代码到 Windows English_United States、German_German
我在 MS Access 上有一个数据库,我通过调用 PDO 和 odbc 驱动程序将其与 PHP 一起使用。我的数据库中有法语、丹麦语和波兰语单词。法语和丹麦语没问题,但波兰语字符没办法,我只得到“
我是一名优秀的程序员,十分优秀!