Qué codificación para hacer que Å Ä Ö funcione

12

Estoy escribiendo una pequeña aplicación en VB.net que me permitirá crear fácilmente una "cuenta de Windows 7" de usuario con una contraseña, en lugar de pasar por el panel de control. El problema que tengo es que cuando creo un archivo bat en VB.net usando la codificación UTF-8, no escribe å ä ö como se supone que debe ser. He intentado todas las codificaciones que puedo encontrar pero no puedo hacer que funcione.

Si alguien tiene una idea de por qué recibo esto, hágamelo saber. Gracias de antemano!

kagstrom2100
fuente
intente publicar en stackoverflow.com y muestre su secuencia de comandos.
Toby Allen
1
@Toby Allen Bueno, no es realmente una pregunta de programación sino una pregunta sobre la codificación de texto, el mismo problema ocurre cuando creo un archivo .bat de la manera "normal".
kagstrom2100

Respuestas:

12

Editar: yo estaba equivocado;)
cmd.exe¿Acepta UTF-8 pero hay que estar seguro para guardarlo sin el BOMal principio del archivo.

Aquí hay una segunda prueba. Puede usarlo chcp 65001al comienzo de su archivo por lotes.

ingrese la descripción de la imagen aquí


Un archivo por lotes no puede ser del tipo UTF-8. Tiene que ser ASCII. Cmd.exesimplemente no acepta otro formato. Hice una pequeña prueba y puedes usar tus personajes, pero necesita algo de trabajo.

Haz un archivo test.batcon echo Å Ä Ö. Guárdelo con formato ANSI/ASCII. Abra cmd.exeay asegúrese de sus cmd.exeusos Lucida Console(para mostrar los caracteres Unicode).

Cuando escriba el archivo, mostrará los caracteres como los viejos caracteres de DOS. Puedes ver un cuadro de traducción aquí .

Cuando cambia a una página de códigos "Windows Ansi" (es decir, el latín de Europa occidental) con chcp 1252los caracteres se muestran correctamente. Si también se transfieren a sus respectivas utilidades depende de esa utilidad.

Pero, ¿por qué estás creando un archivo por lotes para esto? ¿No puedes simplemente codificarlo en VB.net?

cmd.exe


Editar 2 #:

Así es como se establece Lucida Consoleen cmd.exe:

Consola Lucida


El BOMson 3 caracteres al comienzo de un archivo UTF-8. ( \xEF\xBB\xBF)
En VB.net debe crear un archivo sin una BOMcomo esta:

Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
                                                  '^^^^^'
Using sink As New StreamWriter("Foobar.txt", False, utf8WithoutBom)
    sink.WriteLine("...")
End Using
Rik
fuente
Hola y gracias por la respuesta. En mi aplicación vb.net, estoy tratando de crear un archivo .bat con los comandos: net user "username" net localgroup administratörer "type" / add La razón por la que tengo que usar la palabra sueca adminstratörer en lugar de administator es porque localgroup ganó No tome la traducción al inglés como un grupo.
kagstrom2100
Solo pensé que revisar un archivo .bat era demasiado cuando podías hacerlo directamente desde VB.net. Al igual que aquí . Muchos ejemplos en Google también. Por lo tanto, no es necesario crear un .bat como intermediario. Y con esos ejemplos, puede alimentar el nombre Unicode directamente a la función de Windows. (¿A menos que necesite ejecutar el .bat en un momento diferente separado de su aplicación VB.net por alguna razón?)
Rik
Bueno, he estado buscando una forma de hacer esto en VB.net en Google durante días, aunque no he encontrado ninguna manera de hacerlo. Ya probé el ejemplo que vinculaste y no pareció funcionar. ¿Cómo me aseguro de que el archivo .bat no use BOM? Además, ¿qué es la consola Lucida? La única información que pude encontrar al respecto es que es una fuente. Cuando intento exactamente lo que hiciste en el segundo ejemplo / imagen, obtengo esto i.imgur.com/6sh20j0.jpg
kagstrom2100
Agregué a mi respuesta para incluir Lucida Consoley crear archivos sin BOM(Editar # 2, en la parte inferior). ¿Pero crear este usuario a través del net usertrabajo en el símbolo del sistema? ¿Y qué no funciona si lo creas a través de VB.net? Para esto necesitaríamos un código de ejemplo (o una pregunta separada) porque esto debería funcionar. (Por cierto, vinculaste mi imagen, no la tuya, creo, en tu comentario)
Rik
2
@ JohnLBevan Sí, tienes razón. Aparentemente findno maneja la entrada UTF-8 no muy bien. Pero puedes usar findstr. De esta manera:ping 127.0.0.1 -n 2 | findstr /C:" = "
Rik
2

Lo que solucionó esto para mí fue guardar el archivo como UTF-8 sin BOM y usar este código

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

¡Lo que no usé antes fue @echo off para que usar chcp 65001 sea lo que lo solucionó! Gracias también Rik por toda la ayuda :)

kagstrom2100
fuente