用于将文件另存为unicode的脚本

时间:2009-02-06 12:44:32

标签: unicode powershell cygwin

您是否知道我可以通过编程方式或通过scrirpt将一组以ansi字符编码保存的文本文件转换为unicode编码?

我想和我用记事本打开文件时一样,并选择将其保存为unicode文件。

6 个答案:

答案 0 :(得分:10)

这可能对您有用,但请注意它会抓取当前文件夹中的每个文件:


Get-ChildItem | Foreach-Object { $c = (Get-Content $_); `
Set-Content -Encoding UTF8 $c -Path ($_.name + "u") }

为了简洁起见,使用别名也是如此:


gci | %{ $c = (gc $_); sc -Encoding UTF8 $c -Path ($_.name + "u") }

Steven Murawski建议改用Out-File。两个cmdlet之间的差异如下:

  • Out-File将尝试格式化其收到的输入。
  • Out-File的默认编码是基于Unicode的,而Set-Content使用系统的默认编码。

以下是假设文件test.txt在任何一种情况下都不存在的示例:


PS> [system.string] | Out-File test.txt
PS> Get-Content test.txt

IsPublic IsSerial Name                                     BaseType          
-------- -------- ----                                     --------          
True     True     String                                   System.Object     

# test.txt encoding is Unicode-based with BOM


PS> [system.string] | Set-Content test.txt
PS> Get-Content test.txt

System.String

# test.txt encoding is "ANSI" (Windows character set)

事实上,如果您不需要任何特定的Unicode编码,您也可以执行以下操作将文本文件转换为Unicode:


PS> Get-Content sourceASCII.txt > targetUnicode.txt

Out-File是一个“带有可选参数的重定向运算符”。

答案 1 :(得分:3)

最简单的方法是Get-Content'path / to / text / file'| out-file'name / of / file'。

Out-File has an -encoding parameter,默认为Unicode。

如果您想编写一批脚本,可以执行类似

的操作
$files = get-childitem 'directory/of/text/files' 
foreach ($file in $files) 
{
  get-content $file | out-file $file.fullname
}

答案 2 :(得分:0)

使用System.IO.StreamReader(读取文件内容)类以及System.Text.Encoding.Encoding(创建编码的Encoder对象)基类。

答案 3 :(得分:0)

您可以创建一个新的文本文件,并将原始文件中的字节写入新文件,在每个原始字节前放置一个'\ 0'(假设原始文本文件是英文的)。

答案 4 :(得分:-1)

伪代码......

Dim system,file,contents,newFile,oldFile

Const ForReading = 1,ForWriting = 2,ForAppending = 3 Const AnsiFile = -2,UnicodeFile = -1

设置system = CreateObject(“Scripting.FileSystemObject ...

设置file = system.GetFile(“text1.txt”)

设置oldFile = file.OpenAsTextStream(ForReading,AnsiFile)

contents = oldFile.ReadAll()

oldFile.Close

system.CreateTextFile“text1.txt”

设置file = system.GetFile(“text1.txt”)

设置newFile = file.OpenAsTextStream(ForWriting,UnicodeFile)

newFile.Write contents

newFile.Close

希望这种方法有效..

答案 5 :(得分:-1)

你可以使用iconv。在Windows上,您可以在Cygwin下使用它。

iconv -f from_encoding -t to_encoding file