D 语言:我无法将从维基百科 unicode 图表复制的文本块拆分为单字母字符串列表。编辑器输出错误

D language: I can't split a text block copied from a Wikipedia unicode chart into a list of single-letter strings. Output comes out wrong in editor

MWE 和唯一需要查看的代码如下:

module unicode_support;

import std.string;

const wstring unicodeVarSource = `
                              
                              
                              
                              
                              
                                
                              
                              
                              
                                
                                    
                                  
                                
                              
                              
                              
                                    
                                  
                              
                                
                                      
                                
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                                  
                              
                              
                              
                              
                              
                              
                        ϐ   ϑ   ϒ   ϕ   
ϰ   ϱ   ϴ   ϵ   ϶         
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                      `;

const bool[wstring] unicodeVars;

//import std.stdio;
import std.file;

static this() {
   auto letters = unicodeVarSource.split();
   
   write("debug_output.txt", letters);
   
}

首先,Visual D 的调试控制台在显示 Unicode 时存在问题,所以我认为我们最好输出到文件。好吧,在 运行 之后,在类似 Notepad++ 的东西中打开 debug_output.txt,然后转到编码 > Utf-8。输出格式完全错误 - 它不显示您在源文件中可以看到的单个字符。

我需要的是在给定源格式的情况下将源字符串拆分为单个字母,因为这正是我获取数据的方式(从浏览器复制/粘贴)。

然后我将把每个字母放在一个 AA 条目中,这样我就可以确定另一个字符串中的给定字符是否是我的软件将视为变量的内容。

您没有将您认为正在写入文件的内容写入文件。您的变量 letters 是一个 wstring[] - 一个 wstrings 数组。让我们看看 debug_output.txt:

中的实际字节数

你是对的 - 这看起来一点也不像你要写的字符。那是因为这些是 slices - 简单的 length/ptr 对。我在 32 位模式下 运行,所以我得到一个 4 字节长度 (02 00 00 00),后跟一个 4 字节指针 (A2 A2 48 00)。这些指向应用程序中的内存 运行。我会说这通常不应该是 D 所做的 - 它会让用户感到困惑,正如这个 post.

所证明的那样

如果要将此数组写入文件,请考虑使用 std.conv.to:

    import std.conv : to;
    write("debug_output.txt", letters.to!string);

这将为您提供一个包含所有符号的文件。

关于控制台的unicode输出,在Windows上有函数SetConsoleOutputCP,它设置控制台的代码页,并启用unicode输出。 More details on Adam D. Ruppe's site。我不确定可以对 VisualD 的控制台做些什么来让它打印得更好。