我正在用 VB.NET 编写一个小应用程序,这样我就可以轻松创建一个带有密码的用户“Windows 7 帐户”,而不必通过控制面板。
我遇到的问题是,当我使用 UTF-8 编码在 VB.NET 中创建批处理文件时,它不会像预期的那样写入 å ä ö。
我尝试了所有能找到的编码,但无法使其正常工作。
如果有人知道我为什么会得到这个结果,请告诉我。
答案1
编辑:我错了 ;)
cmd.exe
确实接受 UTF-8,但你需要确保保存它没有位于BOM
文件开头。
这是第二个测试。您可以chcp 65001
在批处理文件的开头使用它。
批处理文件不能类型为 UTF-8。它必须是 ASCII。Cmd.exe
不接受其他格式。我做了一个小测试,你可以使用你的字符,但需要做一些工作。
test.bat
使用创建一个文件echo Å Ä Ö
。使用 格式保存ANSI/ASCII
。打开cmd.exe
并确保你的cmd.exe
用途Lucida Console
(显示 Unicode 字符)。
当你输入文件时,它将显示旧 DOS 字符。你可以看到一个翻译图表这里。
当你切换到“Windows Ansi”时代码页(即西欧拉丁语)chcp 1252
字符是否正确显示。它们是否也转移到各自的实用程序取决于该实用程序。
但是你为什么要为此创建批处理文件?你不能直接用 VB.net 编写代码吗?
编辑2#:
Lucida Console
设置方法如下cmd.exe
:
BOM
UTF-8 文件的开头有 3 个字符。()\xEF\xBB\xBF
。
在 VB.net 中,您将创建一个文件没有像BOM
这样:
Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
'^^^^^'
Using sink As New StreamWriter("Foobar.txt", False, utf8WithoutBom)
sink.WriteLine("...")
End Using
答案2
对我来说解决这个问题的方法是将文件保存为不带 BOM 的 UTF-8 格式,然后使用此代码
@echo off
chcp 65001
net user Linus /add
net localgroup Administratörer Test/add
我以前没用过的东西是@echo 关闭这样,使用 chcp 65001 就可以解决问题!非常感谢 Rik 提供的所有帮助 :)