Hel*_*man 10 windows unicode utf-8 hebrew windows-7
我有一个宽字符文件(希伯来文本)在记事本中看起来很好(以"UTF-8编码"保存),在Notepad ++中读得很好,当我复制并粘贴到MS Word时它看起来也很好.但是当我打开一个"DOS框"(Windows控制台)并转到:"输入file.txt"时,它会打印出乱码.
是的,我在Windows控制台上完成了对Unicode的所有建议:我使用"cmd/u"打开控制台,我将字体更改为Lucida,然后输入:"chcp 65001".
运行Windows 7的PC和运行Windows XP SP3的另一台PC上的问题完全相同.
bar*_*lop 10
Font Courier New支持希伯来语,可以添加到命令提示符中.默认字体是consolas,lucida,raster,它们都不支持希伯来语.因此,在命令提示符下添加Courier New.
这是一个注册表黑客做到这一点
http://www.techrepublic.com/blog/windows-and-office/quick-tip-add-fonts-to-the-command-prompt/
这是如何安装字体的一个很好的例子,但是我应该删除很多这些条目,因为大多数条目都没有添加到cmd,因为cmd不支持它们.
Lucida和Consolas是默认值.
Raster是默认未列出的可能'因为它是TTF
所有这些我试图添加,只添加3(由cmd支持)
Courier New,DejaVu Sans Mono,Droid Sans Mono
DejaVu Sans Mono和Droid Sans Mono可以下载,由cmd支持,可能有一些很好的unicode支持/字符,但不包括希伯来语
我有
Consolas <-- default
Courier New <--- added
DejaVu Sans Mono <-- added
Droid Sans Mono <-- added
Lucida Console <-- default
Raster Fonts <-- default
Run Code Online (Sandbox Code Playgroud)
常见的希伯来字体是Miriam和David,但它们无法添加到命令提示符中.
为了记录,Babelmap可以列出系统中支持希伯来语的所有字体,例如在babelmap-单击fonts..font coverage中,然后输入05D0(即aleph).我认为所有这些字体都存在于默认的Windows 7安装中
Aharoni, Arial, Courier New, David, FrankRuehl, Gisha, Levenim MT, Lucida Sans Unicode, Microsoft Sans Serif, Miriam, Miriam Fixed, Narkisim, Rod, Segoe WP, Tahoma, Times New Roman
Run Code Online (Sandbox Code Playgroud)
但是除了Courier New之外,命令提示符中不支持大部分或全部带希伯来语的字体.事实上,命令提示符不支持大多数字体完全停止,甚至不是"新罗马时代"(因为"新罗马时代"不是单倍间隔/固定宽度,而且这是它的许多标准之一支持,其他标准似乎更加模糊.
现在,您可以在命令提示符中添加和选择Courier New.
因此,只要所选字体支持,就可以将unicode字符粘贴到cmd上.
要复制/粘贴,请单击charmap中的"复制"按钮
现在它在剪贴板中
要将其粘贴到命令提示符中,在win7中粘贴到命令提示符不是ctrl-v.您右键单击并选择粘贴.(或者如果处于快速编辑模式,那么只需右键单击)
这是主要的事情.
另外
通常在Windows中,人们可能会使用记事本和字符映射......但是应该注意它们的一些限制.
当您选择的字体支持时,字符映射显示前65536个unicode字符,字符映射显示UTF-16代码.没关系,您仍然可以从字符映射粘贴到cmd.exe窗口,但是您应该知道在cmd.exe和管道中运行的命令不支持utf-16.所以你可以使用字符映射,找到一个字符,例如aleph 05d0,但是值得查看http://www.fileformat.info/info/unicode/char/05d0/index.htm上的字符 并看到这个字符16代码为05d0,utf-8代码为d790.xxd命令和文件命令对于查看文件的实际内容和确定文件类型很有用.
当谈到unicode或UTF16代码> FF的unicode字符集中的任何字符时,记事本有点受限.对于像'type'这样的命令,以及管道和重定向,cmd有点受限.
如果使用cmd.exe你真的需要管道工作'cos管道很重要..
管道仅限于可由CHCP命令指定的编码.
(注意,如果CHCP告诉你你在一个特定的代码页,例如850,它告诉你输入编码.如果你运行命令chcp 850它将改变输入和输出编码.通常它们是相同的.它更简单当它们是相同的.但是如果你使用其他程序来改变cmd的编码,例如c#编译器有一个改变它的开关,那么最好用chcp改变它,这样你就知道两个编码都已设置好了).
有一个CHCP 1200(UTF-16LE)和1201(UTF-16BE),但都不支持,如果您尝试它会说无效代码页(在win7中测试).CHCP不支持UTF-16(它不支持UTF16LE或UTF16BE).有CHCP 65001(那是没有BOM的UTF-8).并且有CHCP 862(在MSDOS日常方式中的老式方式,编码希伯来语,我提到过)
type命令支持UTF16LE和记事本(记事本调用Unicode,是UTF-16 LE),但管道和重定向不支持.type命令还支持CHCP指定/支持的任何代码页.所以类型支持862或65001.
因此,您可以使用记事本将其保存为UTF8(带有BOM),然后摆弄以移除BOM.(这有点矫枉过正了)..或者你可以使用记事本,将它保存为Unicode UTF 16LE ..但是你不能起诉管道......(这很糟糕)..最简单的事情是使用文本编辑器,如notepad2或notepad ++,支持没有BOM的UTF8.
或者如果从cmd做所有事情你可以使用862或65001.虽然许多文本编辑可能不会给予862的良好支持.所以你可能更喜欢65001.
如果你想在记事本中写任何文件并且它的字符大于UTF16中的字符被称为\ uFF,并且你想在该文件的cmd.exe中运行命令,那么一些命令(例如类型命令),如果你不考虑什么是什么支持会有问题.
记事本支持带有BOM的UTF-16BE,UTF-16LE和UTF-8.这不好.并且无需使用xxd和sed或其他命令来移除BOM.如果您有任何带有所谓unicode字符的文件,则该字符位于常规ascii范围之外.一个字符> UTF-16的\ uFF,如字符映射所示为>\uFF,然后使用Notepad2或notepad ++
Type支持UTF16LE,以及CHCP设置的任何代码页,例如65001或862.
管道和重定向按照CHCP设置的任何方式进行.
代码页862已经过时,因此Codepage 65001是一个很好的方法.
xxd和file对于查看文件的编码方式非常有用,如果您遇到问题可能会有所帮助.但并非绝对必要.
因此,如果您想编写一个用于CMD的文件,并且它有一些unicode字符,那么您可以使用xxd和sed之类的命令来删除BOM,以及执行此操作的其他命令.在文本编辑器中创建此类文件的最简单方法是使用文本编辑器,如notepad2或notepad ++,它支持不带BOM的UTF8.
如上所述,获得希伯来语显示可能是最重要的事情.接下来就是能够在文本编辑器中保存文件,您可以使用例如"类型"来显示文件.
如果你想从命令提示符复制,如果不是在快速编辑模式下,然后右键单击然后选择标记然后选择它然后按ENTER键.并粘贴右键并选择粘贴.
还有一点是
显然,chcp 65001中存在一些错误,其中一些批处理文件无法运行,也许某些C程序也无法正常工作.如何在Windows命令行中使用unicode字符? 当cmd在代码页65001中时我甚至看到了c急剧的编译器崩溃(尽管有人可能会责怪c尖锐的编译器,也可能会责怪65001) 为什么当我最后一次将输出编码保留为UTF8时csc.exe会崩溃?
注意 - 此答案的早期版本有一些命令行示例,但它们不必要地复杂.我可能会在某些时候添加一些命令来演示我所描述的内容,但它相当简单.
| 归档时间: |
|
| 查看次数: |
15813 次 |
| 最近记录: |