D 语言记录分隔符在字符串转换后丢失
D lang record separator is being lost after string cast
我正在打开一个 .gz 文件并逐块读取它以解压缩它。
解压文件中的数据如下:
aRSbRScRSd,每条记录(我的虚拟示例 a、b、c 中的记录)之间有记录分隔符(ASCII 代码 30)。
File file = File(mylog.gz, "r");
auto uc = new UnCompress();
foreach (ubyte[] curChunk; file.byChunk(4096*1024))
{
auto uncompressed = cast(string)uc.uncompress(curChunk);
writeln(uncompressed);
auto stringRange = uncompressed.splitLines();
foreach (string line; stringRange)
{
***************** Do something with line
上面代码的结果是:
abcd 不幸的是记录分隔符(ASCII 30)丢失了。
在将 ubyte[] 转换为字符串后,我通过检查数据记录分隔符发现丢失了。
现在我有两个问题:
我应该在代码中更改什么以保留记录分隔符?
上面的代码不用for循环怎么写?我想逐行阅读。
编辑
第一个问题的更通用和更容易理解的代码:
ubyte[] temp = [ 65, 30, 66, 30, 67];
writeln(temp);
string tempStr = cast(string) temp;
writeln (tempStr);
结果是:不想要的 ABC。
字符 30 不是可打印字符,尽管某些编辑器可能会在其位置显示一个符号。它不会丢失,但不会打印出来。
另请注意,将 ubyte[]
转换为 string
通常是不正确的,因为 ubyte[]
数组是可变的,而 string
是不可变的。最好将 ubyte[]
转换为 char[]
.
我正在打开一个 .gz 文件并逐块读取它以解压缩它。
解压文件中的数据如下: aRSbRScRSd,每条记录(我的虚拟示例 a、b、c 中的记录)之间有记录分隔符(ASCII 代码 30)。
File file = File(mylog.gz, "r");
auto uc = new UnCompress();
foreach (ubyte[] curChunk; file.byChunk(4096*1024))
{
auto uncompressed = cast(string)uc.uncompress(curChunk);
writeln(uncompressed);
auto stringRange = uncompressed.splitLines();
foreach (string line; stringRange)
{
***************** Do something with line
上面代码的结果是: abcd 不幸的是记录分隔符(ASCII 30)丢失了。
在将 ubyte[] 转换为字符串后,我通过检查数据记录分隔符发现丢失了。
现在我有两个问题:
我应该在代码中更改什么以保留记录分隔符?
上面的代码不用for循环怎么写?我想逐行阅读。
编辑
第一个问题的更通用和更容易理解的代码:
ubyte[] temp = [ 65, 30, 66, 30, 67];
writeln(temp);
string tempStr = cast(string) temp;
writeln (tempStr);
结果是:不想要的 ABC。
字符 30 不是可打印字符,尽管某些编辑器可能会在其位置显示一个符号。它不会丢失,但不会打印出来。
另请注意,将 ubyte[]
转换为 string
通常是不正确的,因为 ubyte[]
数组是可变的,而 string
是不可变的。最好将 ubyte[]
转换为 char[]
.