我希望读取不会解码为有效 UTF-8 的字节序列,特别是与高和低代理代码点相对应的字节序列。结果应该是一个 raku 字符串。
\n我读到,在 raku 中,\'utf8-c8\' 编码可用于此目的。
\n考虑代码点U+D83F。它是高代理项(为 UTF-16 代理项对的高半部分保留)。
\n如果编码为 UTF-8,U+D83F 的字节序列为 0xED 0xA0 0xBF。
\n如果我使用“utf8-c8”作为编码来读取包含此字节序列的文件,我会得到预期的结果:
\necho -n $\'\\ud83f\' >testfile # Create a test file containing the byte sequence\n
Run Code Online (Sandbox Code Playgroud)\nmyprog1.raku:
\n#!/usr/local/bin/raku\n$*OUT.encoding(\'utf8-c8\');\nprint slurp(\'testfile\', enc => \'utf8-c8\');\n
Run Code Online (Sandbox Code Playgroud)\n$ ./myprog1.raku | od -An -tx1\n ed a0 bf\n
Run Code Online (Sandbox Code Playgroud)\n\xe2\x9c\x94\xef\xb8\x8f 预期结果
\n但是,如果我从读取文件路径切换到读取文件句柄,即使我将文件句柄的编码设置为“utf8-c8”,它也不起作用:
\nmyprog2.raku
\n#!/usr/local/bin/raku\n$*OUT.encoding(\'utf8-c8\');\nmy $fh = open "testfile", :r, :enc(\'utf8-c8\');\nprint slurp($fh, enc …
Run Code Online (Sandbox Code Playgroud) 我想使用vim作为通用源代码压头.
这是我对shell函数的初步尝试,它根据filetype和shiftwidth参数包装vim的调用以使vim重新生成STDIN:
vim-indent () {
local ext=$1
local width=$2
local file=$(mktemp --suffix=."$ext")
cat >| "$file"
vim -E +"set sw=$width|normal! gg=G" +'x' -- "$file" >/dev/null
cat "$file"
}
Run Code Online (Sandbox Code Playgroud)
vim-indent c 2 << "EOF"
int main(int argc, char** argv) {
char operator;
printf("Enter an operator (+, -): ");
scanf("%c", &operator);
switch (operator) {
case '+':
case '-':
printf(operator);
break;
default:
printf("Error! operator is not correct");
}
return 0;
}
EOF
Run Code Online (Sandbox Code Playgroud)
成功.c源重新缩进,有2个空格缩进:
int main(int argc, char** argv) {
char operator; …
Run Code Online (Sandbox Code Playgroud)