使用哪种编码才能使ÅÄÖ工作


12

我正在VB.net中编写一个小应用程序,使我能够轻松地使用密码创建用户“ Windows 7帐户”,而不用通过控制面板。我遇到的问题是,当我在VB.net中使用UTF-8编码创建bat文件时,它并没有像预期的那样写åäö。我已经尝试了所有可以找到的编码,但是无法正常工作。

如果有人对我为什么得到这个有一个想法,请告诉我。提前感谢!


尝试在stackoverflow.com上发布并显示您的脚本。
Toby Allen

1
@Toby Allen好吧,这实际上不是编程问题,而是有关文本编码的问题,当我以“常规”方式创建.bat文件时,也会发生相同的问题。
kagstrom2100

Answers:


12

编辑:我错了;)
cmd.exe不接受UTF-8,但你需要确保将其保存,而不BOM在文件的开头。

这是第二项测试。您可以chcp 65001在批处理文件的开头使用。

在此处输入图片说明


批处理文件不能为UTF-8类型。必须为ASCII。Cmd.exe只是不接受其他格式。我做了一个小测试,您可以使用您的角色,但这需要一些工作。

做一个文件test.batecho Å Ä Ö。将其保存为format ANSI/ASCII。打开一个cmd.exe并确保您cmd.exe使用Lucida Console(显示Unicode字符)。

当您键入文件时,它将显示字符作为旧的DOS字符。您可以在此处查看翻译图表。

当您切换到“ Windows Ansi”- 代码页(即西欧拉丁语)时chcp 1252,字符正确显示。他们是否也转移到各自的公用程序,取决于该公用程序。

但是,为什么要为此创建一个批处理文件?您不能只在VB.net中编码吗?

命令文件


编辑2#:

这是您设置Lucida Console的方式cmd.exe

Lucida控制台


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

嗨,谢谢。在我的vb.net应用程序中,我试图使用以下命令创建一个.bat文件:net user“用户名” net localgroupadministratörer“ type” / add我之所以不得不使用瑞典语adminstratörer而不是administator的原因是因为localgroup赢得了不要将英语翻译作为一个整体。
kagstrom2100

当您直接从VB.net执行此操作时,只是想通过.bat文件有点麻烦。喜欢这里Google中也有很多示例。因此,无需以中间人身份创建.bat。通过这些示例,您可以将Unicode名称直接提供给Windows函数。(除非出于某种原因您需要在不同于VB.net应用的时间运行.bat?)
Rik

好几天来,我一直在Google的VB.net中寻找一种实现此目的的方法,尽管我没有发现任何实现此方法的方法。我已经尝试了您链接的示例,但似乎没有用。如何确保.bat文件不使用BOM表?另外,Lucida Console是什么?我能找到的唯一信息是它是一种字体。当我尝试您在第二个示例/图像中所做的确切操作时,我得到了i.imgur.com/6sh20j0.jpg
kagstrom2100 2013年

我在答案中添加了包含Lucida Console和不创建文件的功能BOM(编辑2,位于底部)。但是通过net user在命令提示符下工作来创建该用户吗?如果通过VB.net创建它,什么不起作用?为此,我们需要一些示例代码(或一个单独的问题),因为这应该可以工作。(顺便说一句,在您的评论中,您链接的是我的形象,而不是您的形象)
瑞克(Rik

2
@JohnLBevan是的,您是对的。显然find不能很好地处理UTF-8输入。但是你可以使用findstr。像这样:ping 127.0.0.1 -n 2 | findstr /C:" = "
Rik 2015年

2

对我来说,解决此问题的方法是将文件另存为UTF-8(不带BOM)并使用此代码

@echo off
chcp 65001
net user Linus /add
net localgroup Administratörer Test/add

我以前没有使用过的东西是@echo off,因此使用chcp 65001可以解决问题!感谢太里克的所有帮助:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.