Utf 8 如何在monetdb中插入问题正文中描述的字符,而不将其转换为+本身?(MonetDB服务器工具包v11.39.5)

Utf 8 如何在monetdb中插入问题正文中描述的字符,而不将其转换为+本身?(MonetDB服务器工具包v11.39.5),utf-8,monetdb,Utf 8,Monetdb,在monetdb v11.39.5中的任何表格中插入替换项。显然这个角色在这里没有很好地表现出来。该字符是写入€的失败尝试。它在Emacs中显示为\200,在Eclipse和Firefox中显示为带数字的正方形,顶部行显示为0,底部行显示为8 0。在设置为UTF-8编码的SQLite数据库中插入此字符将恰好插入此字符。要重现问题,请执行以下操作: 如果不存在测试,则创建模式 如果不存在test.testc文本,则创建表 插入test.testc值 从test.test中选择* 我使用的是Debi

在monetdb v11.39.5中的任何表格中插入替换项。显然这个角色在这里没有很好地表现出来。该字符是写入€的失败尝试。它在Emacs中显示为\200,在Eclipse和Firefox中显示为带数字的正方形,顶部行显示为0,底部行显示为8 0。在设置为UTF-8编码的SQLite数据库中插入此字符将恰好插入此字符。要重现问题,请执行以下操作:

如果不存在测试,则创建模式

如果不存在test.testc文本,则创建表

插入test.testc值

从test.test中选择*

我使用的是Debian GNU/Linux 10 buster。 根据和,此字符是有效的UTF-8

xxd-文件名中带有字符的文件名的输出为 00000000:c280。。使用Emacs和00000000:c280 0a保存文件时。。。使用gedit保存文件时

echo$LANG在我的计算机上打印fr_fr.UTF-8


谢谢

您的文件确实正确编码。字节C2 80是Unicode代码点U+0080的UTF-8编码,它不是欧元符号,而是一些控制字符

如果我在我的系统(也是Debian 10)上尝试你的例子,使用一个家庭编译的Oct2020-SP1,我会得到

$ mclient -d foo t.sql
+------+
| %2   |
+======+
|      |
: ...  >
+------+
1 tuple !1 field truncated!
note: to disable dropping columns and/or truncating fields use \w-1

$ mclient -d foo t.sql -fraw
% .%2 # table_name
% %2 # name
% char # type
% 1 # length
[ "\302\200"    ]
八进制302是十六进制C2,八进制200是十六进制80,所以看起来U+0080没有损坏,它回来时没有改变。 为什么在你的系统上它变成了“我不知道”。
的UTF-8编码是C3 82。

字节\200本身不是有效的UTF-8。它是一个所谓的连续字节,仅作为较长序列的一部分出现。请给出一个完整的示例,其中包含CREATETABLE语句和INSERT语句?为了完整起见,您是否也可以将示例放在一个文件中,并显示xxd-a文件名的输出?我们可以使用它来获得示例文件的字节精确副本。最后,您能否向我们展示echo$LANG的输出,以便我们了解您的区域设置?值得一提的是,JoeriThat看起来像是一个双重编码问题,其中已经在UTF-8中的一个字节字符串被再次编码。底部127个字符将保持不变,但其余字符将被损坏。