您是否知道我可以通过编程方式或通过scrirpt将一组以ansi字符编码保存的文本文件转换为unicode编码?
我想和我用记事本打开文件时一样,并选择将其保存为unicode文件。
答案 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