我正在VB.net中编写一个小应用程序,使我能够轻松地使用密码创建用户“ Windows 7帐户”,而不用通过控制面板。我遇到的问题是,当我在VB.net中使用UTF-8编码创建bat文件时,它并没有像预期的那样写åäö。我已经尝试了所有可以找到的编码,但是无法正常工作。
如果有人对我为什么得到这个有一个想法,请告诉我。提前感谢!
我正在VB.net中编写一个小应用程序,使我能够轻松地使用密码创建用户“ Windows 7帐户”,而不用通过控制面板。我遇到的问题是,当我在VB.net中使用UTF-8编码创建bat文件时,它并没有像预期的那样写åäö。我已经尝试了所有可以找到的编码,但是无法正常工作。
如果有人对我为什么得到这个有一个想法,请告诉我。提前感谢!
Answers:
编辑:我错了;)
cmd.exe
不接受UTF-8,但你需要确保将其保存,而不该BOM
在文件的开头。
这是第二项测试。您可以chcp 65001
在批处理文件的开头使用。
批处理文件不能为UTF-8类型。必须为ASCII。Cmd.exe
只是不接受其他格式。我做了一个小测试,您可以使用您的角色,但这需要一些工作。
做一个文件test.bat
用echo Å Ä Ö
。将其保存为format ANSI/ASCII
。打开一个cmd.exe
并确保您cmd.exe
使用Lucida Console
(显示Unicode字符)。
当您键入文件时,它将显示字符作为旧的DOS字符。您可以在此处查看翻译图表。
当您切换到“ Windows Ansi”- 代码页(即西欧拉丁语)时chcp 1252
,字符正确显示。他们是否也转移到各自的公用程序,取决于该公用程序。
但是,为什么要为此创建一个批处理文件?您不能只在VB.net中编码吗?
这是您设置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
Lucida Console
和不创建文件的功能BOM
(编辑2,位于底部)。但是通过net user
在命令提示符下工作来创建该用户吗?如果通过VB.net创建它,什么不起作用?为此,我们需要一些示例代码(或一个单独的问题),因为这应该可以工作。(顺便说一句,在您的评论中,您链接的是我的形象,而不是您的形象)
find
不能很好地处理UTF-8输入。但是你可以使用findstr
。像这样:ping 127.0.0.1 -n 2 | findstr /C:" = "
对我来说,解决此问题的方法是将文件另存为UTF-8(不带BOM)并使用此代码
@echo off
chcp 65001
net user Linus /add
net localgroup Administratörer Test/add
我以前没有使用过的东西是@echo off,因此使用chcp 65001可以解决问题!感谢太里克的所有帮助:)