使用UTF8 BOM写一个空文件

时间:2015-08-02 12:13:37

标签: windows shell powershell batch-file cmd

OS Windows 7 SP1
我在cmd.exe

中创建了一个空文本文件
echo 2> .gitignore

此命令将std::cerr(本例中为空输出)重定向到.gitignore文件中。结果文件具有ANSI编码,但我需要utf-8。我是否可以为utf-8操作指出必要的编码(>)?

7 个答案:

答案 0 :(得分:4)

通过批处理文件输出重定向是不可能的。

使用内置实用程序执行此操作的唯一方法是调用powershell:

powershell -c "[io.file]::WriteAllText('.gitignore','',[System.Text.Encoding]::UTF8)"

答案 1 :(得分:1)

纯批量解决方案,基于dbenham的Generate nearly any character, including TAB, from batch

@echo off

(set LF=^
%=empty=%
)

::Create variables to store BOM bytes
call :hexprint "0xEF" EF
call :hexprint "0xBB" BB
call :hexprint "0xBF" BF

<nul SET /P "=%EF%%BB%%BF%"> output.txt
exit /b

:hexPrint  string  [rtnVar]
  for /f eol^=^%LF%%LF%^ delims^= %%A in (
    'forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c echo(%~1"'
  ) do if "%~2" neq "" (set %~2=%%A) else echo(%%A
exit /b

答案 2 :(得分:0)

混合批处理-JScript解决方案。只需另存为批处理文件即可正常运行

@if (@CodeSection == @Batch) @then

@echo off
cscript //e:jscript //nologo "%~f0" %1
exit /b

@end

// JScript Section

var fso = new ActiveXObject("Scripting.FileSystemObject");
var file = fso.CreateTextFile(WScript.Arguments.Item(0), true);

file.Write(String.fromCharCode(239));
file.Write(String.fromCharCode(187));
file.Write(String.fromCharCode(191));
file.Close();

与上述相同,但混合批次-VBS

<!-- : Begin batch script
@echo off
cscript //nologo "%~f0?.wsf" %1
exit /b

----- Begin wsf script --->
<job><script language="VBScript">
    Set fso  = CreateObject("Scripting.FileSystemObject")
    Set file = fso.CreateTextFile(WScript.Arguments.Item(0), true)

    file.Write Chr(239)
    file.Write Chr(187)
    file.Write Chr(191)
    file.Close
</script></job>

答案 3 :(得分:0)

我有一个带有 BOM 的空文本文件,我将其复制,然后将我需要的内容附加到此文件中。

copy empty-bom.txt .gitignore
echo stuff>>.gitignore

我更喜欢这个解决方案,因为它比生成 BOM 的所有其他解决方案更具可读性和可理解性。

答案 4 :(得分:0)

使用 BOM 创建空的 UTF-8 文件的纯批处理:

set _FILE=output.txt
chcp 437 > nul
forfiles /c "cmd /c <nul set /p=0xEF0xBB0xBF>\"%_FILE%\"" > nul
chcp 65001 > nul

并添加行:

>> "%_FILE%" (
    echo Line 1
    echo Line 2
)

答案 5 :(得分:-1)

这将为您提供utf 16,使用cmd开关{/ p>启动/u

cmd /u /c type ansi.txt > uni.txt

/u使内部命令输出UTF16。

答案 6 :(得分:-1)

创建一个.bat / .cmd文件,如:

<nul SET /P "=123"> output.txt

然后在您喜欢的HEX编辑器中用EF BB BF字节替换123。

要编辑此.bat / .cmd文件,以后不应使用Window的Notepad.exe,因为它会将BOM字节转换为&#34中的问号(?) ;另存为ASCII&#34;模式(或者,在&#34;另存为UTF-8&#34;模式下,它将不需要的BOM添加到脚本文件本身)。 相反,人们可以使用Notepad ++和#34; UTF-8(没有BOM)&#34;模式。