Vim中的中欧字符并将其打印出来

Vim中的中欧字符并将其打印出来,vim,character-encoding,windows-xp,Vim,Character Encoding,Windows Xp,我试图说服GVim 7.3将中欧字符(šđčćžĐĆŽ)正确打印到PDF。我认为相关的设置 set encoding=utf8 set fileencodings=ucs-bom,utf8,cp1250,latin1 set guifont=Consolas:h9:cEASTEUROPE set printfont=Consolas:h9:cEASTEUROPE 将编码更改为cp1250(并再次写入,因为编码的更改会导致错误)之后,它们将正确打印出来 现在,我认为utf-8比cp1250更大、

我试图说服GVim 7.3将中欧字符(šđčćžĐĆŽ)正确打印到PDF。我认为相关的设置

set encoding=utf8
set fileencodings=ucs-bom,utf8,cp1250,latin1
set guifont=Consolas:h9:cEASTEUROPE
set printfont=Consolas:h9:cEASTEUROPE
将编码更改为
cp1250
(并再次写入,因为编码的更改会导致错误)之后,它们将正确打印出来

现在,我认为utf-8比cp1250更大、更完整。为什么更改后它们会正确打印出来,或者更重要的是,为什么我不能将它们与
enc=utf-8
结合使用(我通常使用它们是因为有大量其他字符,通常无法访问)



使用enc=utf8键入并保存时:

0000000: c5a1 2020 2020 c5a0 0d0a c491 2020 2020  ..    ......    
0000010: c490 0d0a c48d 2020 2020 c48c 0d0a c487  ......    ......
0000020: 2020 2020 c486 0d0a c5be 2020 2020 c5bd      ......    ..
0000030: 0d0a 0d0a 0d0a                           ......
。。。带enc=cp1250

0000000: 9a20 2020 208a 0d0a f020 2020 20d0 0d0a  .    ....    ...
0000010: e820 2020 20c8 0d0a e620 2020 20c6 0d0a  .    ....    ...
0000020: 9e20 2020 208e 0d0a 0d0a                 .    .....
这里有一个非常接近这个的讨论。最后的结论是,“它不起作用,不要那样做”——只需将文件保存在UTF-8中,并用其他东西(如记事本)打印即可

这适用于我的系统:

:silent !notepad /pt "%" "PDFLite"
其中,
PDFLite
是我打印到PDF打印机的名称


编辑:我正在vim中使用“utf-8”编码。

安装paps,通过vim“!paps<%>out.ps”中的命令可以正常工作,然后您可以使用ps2pdf将其转换为pdf


如果在mac电脑上,请使用“brew安装paps”

我使用的Vim版本与OP完全相同。我打印这些内容的魔法咒语是:

:se fenc=cp1252
:w
:e ++enc=cp1252
:se enc=cp1252
:se fenc=cp1252
:se penc=cp1252
:hardcopy
使用适合您的代码页。 前三行(即保存和重新加载)可能不需要,但它应确保实际转换文本(而不是重新解释缓冲区)。需要设置AFAICT
enc
penc
fenc
就是CYA。然后使用
:硬拷贝
任意方式

如果您希望将文件存储在其他代码页(拉丁语1、utf-8等),请记住将相关编码(
enc
fenc
)更改回来并重新保存。那里的程序是
:se fenc
:w
。然后,您可能会继续使用
:e
(可能会添加
++enc=xxx
)和
:se enc=xxx
,以检查它,并确保您正在使用首选的代码页制作副本,以及另一轮
:se fenc=xxx
:w
,这样做只是为了安全起见


这有点多余,但这是一种确定Vim与您处于同一页的方法。正如您所注意到的,Windows上的代码页处理(至少是WRT打印)有一些有趣的地方,所以我不一定相信它完全在内部完成所有正确的事情。我只是强制它更改实际的字节表示形式,然后确保它正在使用它。

打印/PDFing时会得到哪些特定字符?在发出
:硬拷贝
命令之前,尝试显式设置打印编码:
:set printcodeding=utf-8
@ib.-我没有可用的“printcodeding”选项,由于+打印机,但-postscript。另外,我忘了提到,我所问的问题在Vim(6.9,7.0??)的一个较旧版本中使用了一些(?)设置。唉,我迷路了。你能给我们看看你的
:version
命令的输出吗?我很想看看你的示例文件的
xxd
版本的各种状态,即在UTF-8中写入/保存时,在CP1250中写入/保存时,以及在打印成PDF后。要转换为hexdump格式,请执行以下操作:%!xxd(要转换回do
:%!xxd-r
)。考虑到它们是我的字母表的一部分,因此经常使用,这不是很舒服。我可以使用cp1250,并将其打印出来(可以使用fire),但我没有能力使用utf的所有“酷符号”:/(更不用说有很多插件依靠utf8正常工作),这不能解决您的问题吗?它相当于用上述命令替换您对
:硬拷贝的使用,一切正常。你可以使用UTF-8。这只是一个半解决方案,不仅让我想到我在哪台计算机上有什么PDFPrinter,而且还有其他各种各样的问题,这些问题都是由于utf8没有正确实现(首先想到的是语法着色)。我想在不久的将来我会继续使用cpxxxx编码系列:/不要使用ps2pdf。而是从github/dov/paps获取最新版本的paps,它支持直接输出pdf。
:se fenc=cp1252
:w
:e ++enc=cp1252
:se enc=cp1252
:se fenc=cp1252
:se penc=cp1252
:hardcopy