Out-File 似乎在使用UTF-8时强制BOM:
$MyFile = Get-Content $MyPath
$MyFile | Out-File -Encoding "UTF8" $MyPath
Run Code Online (Sandbox Code Playgroud)
如何使用PowerShell以UTF-8编写没有BOM的文件?
我想知道为什么git告诉我这个:?
$ git diff MyFile.txt
diff --git a/MyFile.txt b/MyFile.txt
index d41a4f3..15dcfa2 100644
Binary files a/MyFile.txt and b/MyFile.txt differ
Run Code Online (Sandbox Code Playgroud)
他们不是文本文件吗?
我检查了.gitattributes,它是空的.为什么我收到这条消息?我不能再使用差异了
添加:
我注意到@文件中有一个权限,这是什么?这可能是原因吗?
$ls -all
drwxr-xr-x 5 nacho4d staff 170 28 Jul 17:07 .
drwxr-xr-x 16 nacho4d staff 544 28 Jul 16:39 ..
-rw-r--r--@ 1 nacho4d staff 6148 28 Jul 16:15 .DS_Store
-rw-r--r--@ 1 nacho4d staff 746 28 Jul 17:07 MyFile.txt
-rw-r--r-- 1 nacho4d staff 22538 5 Apr 16:18 OtherFile.txt
Run Code Online (Sandbox Code Playgroud) 虽然Powershell几乎不可能实现,但我想要实现的目标却相当简单.
我想显示文件的完整路径,其中一些文件的名称中包含阿拉伯语,中文,日语和俄语字符
在控制台中看到的输出正在被另一个脚本消耗.输出包含?而不是实际的人物.
执行的命令是
(Get-ChildItem -Recurse -Path "D:\test" -Include *unicode* | Get-ChildItem -Recurse).FullName
Run Code Online (Sandbox Code Playgroud)
是否有任何简单的方法来启动PowerShell(通过命令行或以任何方式写入脚本),以便正确地看到输出.
PS我在Stack Overflow上经历了很多类似的问题,但除了称之为Windows控制台子系统问题之外,它们都没有太多的输入.
您好我正在寻找powershell脚本,它将目录中的所有csv文件合并到一个文本文件(.txt)中.所有csv文件都有相同的标题,它总是存储在每个文件的第一行.所以我需要从第一个文件中获取头文件,但是在其余文件中应该跳过第一行.我能够找到完全符合我需要的批处理文件,但是我在一个目录中有超过4000个csv文件,并且完成这项工作需要45分钟以上.
@echo off
ECHO Set working directory
cd /d %~dp0
Deleting existing combined file
del summary.txt
setlocal ENABLEDELAYEDEXPANSION
set cnt=1
for %%i in (*.csv) do (
if !cnt!==1 (
for /f "delims=" %%j in ('type "%%i"') do echo %%j >> summary.txt
) else (
for /f "skip=1 delims=" %%j in ('type "%%i"') do echo %%j >> summary.txt
)
set /a cnt+=1
)
Run Code Online (Sandbox Code Playgroud)
任何建议如何创建powershell脚本比这批代码更有效?
谢谢.
约翰
我正在使用Sandcastle Helpfile Builder生成一个帮助文件(.chm).该项目是一个.shfbproj文件,它是XML格式,与msbuild一起使用.
我想自动更新生成的.chm文件中显示的页脚文本.我用这个片段:
$newFooter = "<FooterText>MyProduct v1.2.3.4</FooterText>";
get-content -Encoding ASCII $projFile.FullName |
%{$_ -replace '<FooterText>(.+)</FooterText>', $newFooter } > $TmpFile
move-item $TmpFile $projFile.FullName -force
Run Code Online (Sandbox Code Playgroud)
定向到$ TmpFile的输出始终是一个多字节字符串.但我不希望这样.如何将输出的编码设置为ASCII?
我一直在尝试使用类似的东西将文件从我的Android设备移动到我的osx机器:adb shell tar -c directory_to_copy | tar -x.似乎远程tar正在工作,但文件被破坏的方式.经过一番游戏,我发现:
似乎adb shell命令将LF转换为CRLF:
% adb shell 'cd /mnt/sdcard;echo hi>a.bin'
% adb shell 'cd /mnt/sdcard;cat a.bin' | hexdump -C
00000000 68 69 0d 0a |hi..|
00000004
% adb pull /mnt/sdcard/a.bin
0 KB/s (3 bytes in 0.457s)
% hexdump -C a.bin
00000000 68 69 0a |hi.|
00000003
Run Code Online (Sandbox Code Playgroud)它看起来是服务器或守护进程导致的而不是客户端(请参阅len = 4):
% ADB_TRACE=1 adb shell 'cd /mnt/sdcard;cat a.bin'
[... snip ...]
system/core/adb/commandline.c::read_and_dump():read_and_dump(): post adb_read(fd=3): len=4
[... snip ...]
Run Code Online (Sandbox Code Playgroud)我猜这个守护进程在windows用户的shell命令中进行了那种翻译.
我的问题是:
谢谢!
创建一个文件utf8.txt.确保编码为UTF-8(无BOM).将其内容设置为€
在cmd.exe:
type utf8.txt > out.txt
内容out.txt是€
在PowerShell(v4)中:
cat .\utf8.txt > out.txt
要么
type .\utf8.txt > out.txt
Out.txt内容是 €
如何全局使PowerShell正常工作?
我遵循这些准则来使用OpenSSL生成自签名证书.
我在Windows 10下.我的工作目录如下:
PS E:\Certificats\predix\root\ca> ls
Directory: E:\Certificats\predix\root\ca
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 9/1/2016 11:57 AM certs
d----- 9/1/2016 11:55 AM crl
d----- 9/1/2016 12:00 PM intermediate
d----- 9/1/2016 11:55 AM newcerts
d----- 9/1/2016 11:56 AM private
-a---- 9/1/2016 11:55 AM 2 index.txt
-a---- 9/1/2016 11:56 AM 4306 openssl.cnf
-a---- 9/1/2016 11:55 AM 14 serial
Run Code Online (Sandbox Code Playgroud)
在指南中的几个步骤之后,当我输入时
openssl ca -config openssl.cnf -extensions v3_intermediate_ca -days 3650 -notext -md s
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Using configuration from openssl.cnf
Enter pass …Run Code Online (Sandbox Code Playgroud) git diff 4ee42367 8c650199 > changes2.patch
git checkout newBranch
git apply changes2.patch
error: unrecognized input
Run Code Online (Sandbox Code Playgroud)
当我尝试应用更改时,我会收到错误消息。我在做什么错?
大家好,
作为控制台/终端爱好者和数据库管理员 (PostgreSQL),使用正确的字符编码对我来说至关重要。因此,我希望我的客户端控制台/终端窗口始终设置为例如 UTF-8。
回到 Windows 的 CMD.EXE,这个尝试就像输入命令chcp 65001来设置所需的代码页标识符一样简单。现在,我正在切换到 PowerShell 并且设置字符编码似乎很奇怪,恕我直言。
我已经对如何将 PowerShell 会话设置为 UTF-8 进行了一些研究,我发现我需要三个步骤/命令来完成它。
PS C:\> $OutputEncoding = [System.Text.Encoding]::UTF8
PS C:\> [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
PS C:\> chcp 65001
Run Code Online (Sandbox Code Playgroud)
尽管前两个命令不直观且难以记住...遗漏其中一个命令会导致无法正常工作!此外,仅设置其中一个似乎对其他人没有影响。
因此,我必须设置所有三个以使用 PostgreSQL 的psql数据库客户端。否则我在导出/导入数据时会遇到编码问题。
现在我的问题是:“为什么?难道没有更简单的方法可以在 PowerShell 中简单地设置字符编码吗?” 不幸的是,我自己没有找到任何关于设置字符编码的合理文档!
提前致谢
TheIncorrigible1的第二条评论让我得到了迄今为止最好的答案:在 Powershell 中显示 Unicode - 因此可以将整个 PowerShell 与两个单独的语句设置为所需的编码 (UTF-8)。
PS C:\> $OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8
PS C:\> $PSDefaultParameterValues['*:Encoding'] = 'utf8'
Run Code Online (Sandbox Code Playgroud)
$OutputEncoding设置例如|(管道)和/或程序和/或进程之间的通信的编码。 …powershell ×6
utf-8 ×3
git ×2
unicode ×2
adb ×1
android ×1
batch-file ×1
binary ×1
csv ×1
encoding ×1
openssl ×1
postgresql ×1
terminal ×1
windows ×1