- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将文件的内容传递到我制作的简单ASCII对称加密程序中。这是一个简单的程序,可从STDIN读取输入,并对输入的每个字节加或减某个值(224)。
例如:如果第一个字节为4,而我们要加密,则它变为228。如果它超过255,则程序仅执行一些模运算。
这是我通过cmd获得的输出(test.txt包含“这是一个测试”):
type .\test.txt | .\Crypt.exe --encrypt | .\Crypt.exe --decrypt
this is a test
type .\test.txt | .\Crypt.exe --decrypt | .\Crypt.exe --encrypt
this is a test
type .\test.txt | .\Crypt.exe --encrypt | .\Crypt.exe --decrypt
this is a test_*
最佳答案
tl;博士:
如果需要原始字节处理和/或需要防止PowerShell偶尔在文本数据中添加尾随换行符,请完全避免使用PowerShell管道。
而是使用cmd
封装为/c
(在Windows上;在类似Unix的平台上,使用sh
或bash
与-c
):
cmd /c 'type .\test.txt | .\Crypt.exe --encrypt | .\Crypt.exe --decrypt'
请注意,如果要在PowerShell变量中捕获输出,则
必须确保[Console]::OutputEncoding
与.\Crypt.exe
程序的(有效)输出编码( Activity 的OEM代码页面)匹配,这种情况下默认情况下应为true;有关详细信息,请参见下一部分。System.String
)相互转换,该字符串是UTF-16代码单元的序列。Crypt.exe
)的数据,您需要匹配它们的字符编码。在您的情况下,对于使用原始字节处理的Windows控制台应用程序,隐式编码是系统的 Activity OEM代码页。$OutputEncoding
首选项变量的编码来编码(始终视为文本)数据,在Windows PowerShell中默认为ASCII(!),在PowerShell中默认为(无BOM)UTF-8 [Core ]。[Console]::OutputEncoding
(它本身反射(reflect)chcp
报告的代码页)来解码接收到的数据,并且在Windows上默认情况下反射(reflect) Activity 的OEM代码页,在Windows PowerShell和PowerShell中[Core] [1]。$OutputEncoding
设置为 Activity 的OEM代码页面:# Make sure that PowerShell uses the OEM code page when sending
# data to `.\Crypt.exe`
$OutputEncoding = [Console]::OutputEncoding
"foo" | .\Crypt.exe
不会将$OutputEncoding
(代表"foo"
编码的字节)发送到.\Crypt.exe
的stdin,而是在Windows上发送"foo`r`n"
。也就是说,系统会自动且始终附加一个(适合平台的)换行符序列(在Windows上为CRLF)(除非该字符串已经碰巧有一个尾随的换行符)。"`r`n"
也要进行字节值移位,这意味着第一个Crypt.exe
调用将其转换为-*
,从而在将数据发送到第二个"`r`n"
调用时会附加另一个Crypt.exe
。-*
),加上一个加密的换行符,其结果为φΩ
。# Ensure that .\Crypt.exe output is correctly decoded.
$OutputEncoding = [Console]::OutputEncoding
# Invoke the command and capture its output in variable $result.
# Note the use of the `Get-Content` cmdlet; in PowerShell, `type`
# is simply a built-in *alias* for it.
$result = Get-Content .\test.txt | .\Crypt.exe --decrypt | .\Crypt.exe --encrypt
# Remove the last 4 chars. and print the result.
$result.Substring(0, $result.Length - 4)
考虑到调用答案顶部所示的cmd /c
也是可行的,这似乎不值得。cmd
(或类似POSIX的 shell ,例如bash
)不同:$OutputEncoding
首选项变量中指定的字符编码将转换为文本(字符串),在Windows PowerShell中默认设置为ASCII(!),在PowerShell [Core]中默认为(BOM-less)UTF-8。$OutputEncoding
,PowerShell(从v7.0开始)将在发送到外部程序的第一行输出中发出BOM。因此,例如,不要在Windows PowerShell中使用[System.Text.Encoding]::Utf8
(发出BOM),而应使用[System.Text.Utf8Encoding]::new($false)
(不发出)。[Console]::OutputEncoding
中指定的编码,被解码为文本(字符串)行,默认编码为 Activity 的OEM Windows上的代码页(令人惊讶的是,两个PowerShell版本都从v7.0-preview6 [1]开始)。System.String
type表示文本,该文本基于UTF-16代码单元(通常较为宽松,但错误地称为“Unicode” [3])。>
生成UTF-16LE编码的文件(带有BOM),而PowerShell [Core]明智地默认为无BOM的UTF-8(在整个文件编写cmdlet中始终如此)。$OutputEncoding
缺省已经默认为UTF-8,应该使[Console]::OutputEncoding
相同是有意义的-即,如this GitHub issue中所述, Activity 代码页在Windows上有效地为65001
。System.Byte
(PowerShell [Core])/ Get-Content -AsByteStream
(Windows PowerShell)将文件读取为.NET Get-Content -Encoding Byte
数组,但唯一的方法是诸如数组之类的进一步过程是通过管道传递到旨在处理字节数组的PowerShell命令,或者通过将其传递给期望字节数组的.NET类型的方法。如果您试图通过管道将这样的数组发送到外部程序,则每个字节将以其十进制字符串表示形式在其自己的行上发送。关于powershell - 通过CMD和PowerShell进行管道传输时,行为和输出不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59110563/
我想创建一个基于 jQuery 的非常简单的 html 编辑器(不是所见即所得)。 我的问题是如何制作 textarea或 div可能 在上面写一些文字 然后样式即标签(例如 some stuff 将
根据文档 isset 条款“测试此项目中是否已设置给定属性”。我不明白设置属性时 isset 返回 true 还是 false 在下面的代码片段中,当 env.JAVA_HOME 未设置时,java.
我正在尝试取消映射 o这是执行 :only 的默认命令( :help :only ),所以我尝试的第一件事是: nmap o 这种作品,除非我按 ,等待超过timeoutlen ms 然后按 o
我有以下型号: class MetaData(models.Model): created_at = models.DateTimeField(auto_now_add=True, auto_
下面列出了两行代码。两者对日期和时间的期望相同,但只有一个有效。我正在使用 R 3.1。 以下不起作用: DateTime2=strftime("08/13/2010 05:26:24.350", f
我有一个关于 C 代码的问题。 #include void foo(void){ int a; printf("%d\n",a); } void bar(void){
如果文件大小 > 8k,为什么读取的最后一个字节 = 0? private static final int GAP_SIZE = 8 * 1024; public static void main(
我有一个命令 Get-Testdata从不同来源检索测试数据并将这些数据存储到 PSObject以不同的值作为属性。然后将对象总数存储为数组,以便于操作、排序、计算等。 我的问题是我希望能够将这些数据
我正在使用 epoll 将大消息写入使用 HTTP 协议(protocol)的服务器。 fds 都设置为非阻塞,我正在使用边缘触发事件。我知道对于 EPOLLIN,我需要循环读取 fd,直到返回 EA
这对我来说听起来很奇怪: $test_1 = 'string'; $test_2 = '0'; var_dump(intval($test_1)); // Output: int 0 var_dump
这个问题在这里已经有了答案: Java: Integer equals vs. == (7 个回答) 7年前关闭。 请您解释以下行为。 public class EqAndRef { publ
Drupal 的行为到底是什么? 它为模块开发人员提供什么类型的服务层? 它映射到 jQuery.ready 的关系类型是什么? 最佳答案 长版:Drupal.behaviors 不仅仅是 jQuer
以下代码: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ for (int i=0
人们可以将项目添加到数据库中。我让他们选择在此时添加它,或手动选择日期。 因此我得到了这个 HTML 结构。 (请注意,我将日期和时间选择器妥协为只有一行文本) Selec
创建了一个数据框: simpleDF is.na(simpleDF$vals) [1] TRUE TRUE FALSE > is.nan(simpleDF$vals) [1] FALSE TRU
我有一个大的 docker 镜像 A,我创建了一个新的 Dockerfile FROM A RUN rm /big-folder 我尝试使用以下方法构建图像: docker build --squas
我想知道以下情况下 JVM 的行为是什么: JVM 最小堆大小 = 500MB JVM 最大堆大小 = 2GB 操作系统有 1GB 内存 JVM启动后,程序运行一段时间后,使用内存超过1GB。我想知道
我们正在使用 spikeearrest 策略,但我们不了解其工作原理。峰值逮捕配置如下: 5pm 阅读文档,我们了解到,如果我们在一分钟内调用此流超过 5 次,则该策略将在第 5 次之后
我正在使用 cURL 发送 POST 请求: curl http://tarvos.local:8080/partial_Users/2 -d '{currentPage : 1, firstID :
我的表中有 6442670 条记录,我正在使用以下命令获取它们jdbctemplate 使用行号一次 1000000 个。以下是查询 select * from (select rowNum rn
我是一名优秀的程序员,十分优秀!