问题标签 [multibyte-characters]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
245 浏览

c++builder - LastDelimiter 找不到最后一个空格字符

我正在使用 C++ Builder 10.2 Tokyo,我必须在变量中找到最后一个空格的位置,该String变量的值类似于"XXX YYYYY TYUR KXYZ"

如果我使用该函数LastDelimiter(const System::UnicodeString Delimiters, const System::UnicodeString S),它返回 0,但如果我使用该UnicodeString method::LastDelimiter( UnicodeString Delimiter )方法,它返回变量的长度。

这是我正在使用的代码:

在调试方法调用时,它给了我正确的值(34),尽管结果nPosCut是 42(消息长度),如代码中所写,或者如果我更改String(" ")L" ".

我究竟做错了什么?

0 投票
2 回答
1185 浏览

c++ - MFC 应用程序中使用多字节字符集的 UTF-8 文本

我正在开发一个接收以 UTF-8 编码的文本并需要在某些 MFC 控件上显示它的应用程序。该应用程序是使用多字节字符集 (MBCS) 构建的,我们假设这无法更改。

我希望如果我将收到的文本从 UTF-8 转换为宽字符字符串,我将能够使用该SetWindowTextW方法正确显示它。为了尝试这个,我使用了一个玩具应用程序,它从文件中读取输入并设置我的控件的文本。

用 MBCS 构建了玩具应用程序后,我没有得到我想要的东西。 在此处输入图像描述

一旦我使用 unicode 构建应用程序,一切正常 在此处输入图像描述

这是否意味着当我使用 MBCS 构建时,没有希望对单个控件使用 unicode 文本?如果可能的话,你能给我一些指示吗?谢谢你。

0 投票
1 回答
906 浏览

c - 如何计算多字节字符的数量?

我想为以下程序获得 5 而不是 10。有人知道如何修复代码来计算多字节字符的数量吗?谢谢。

0 投票
1 回答
72 浏览

php - 如何在mysql或数组中查找未知字符

首先,我使用排序规则创建了数据库,utf8mb4_general_ci并使用相同的排序规则创建了表。然后我导入csv文件

样本数据

我检查
SELECT malayalam_definition from dict;
然后var_dump($row);给出

您可以在每个单词之后找到一个未知字符,例如"ശരശയ്യ ". 我试过select trim(malayalam_definition) from dict但给出了相同的结果。如何找出每个单词后的那个字符?

0 投票
2 回答
388 浏览

php - 将字符串转换为字符数组 - 多字节

假设在 2019 年,每个不是 UNICODE 安全的解决方案都是错误的。在 PHP 中将字符串转换为 UNICODE 字符数组的最佳方法是什么?

显然,这意味着使用大括号语法访问字节是错误的,以及使用str_split

从样本输入,如:

我预计:

0 投票
0 回答
263 浏览

apache-spark - Spark.Sql 无法从配置单元表中读取日语(Mutltbyte 字符)?

作为我的一个程序的一部分,我正在蜂巢表中写日语字符。后来,当我从 Hive 中选择该字段时,我能够读取它,但是当我从 Spark.sql 中读取它时,它并没有给我预期的结果。

从 hive 查询时的同一张表给出输出 -

0 投票
0 回答
49 浏览

windows - JSch - 无法列出某些具有多字节字符的文件路径

我正在尝试使用 JSch 从 Windows SFTP 服务器上的文件夹位置获取文件列表。我看到的一种行为是:

在一定数量的字符之后,文件甚至没有被列出,也没有抛出异常。

例如:

未列出的文件: C:/Data/Thai-Han-Test1/All_testcases_special_characters/Special_characters/Multilinguage_Characters_list/Han/当世界需要时,请使用!将于年月10日-12日在德国市的第第十届统一码国际研讨会现在开始注册。本次 - Copy2.txt

列出的文件: C:/Data/Thai-Han-Test1/All_testcases_special_characters/Special_characters/Multilinguage_Characters_list/Han/世界当需要交流的时候,请用!今年10月10日-12日在德国市举办的第十一届统一码国际研讨会现在开始注册。本 - Copy3.txt

为了获得可以列出的文件路径的最大长度,我从第一个字符串中删除了一个额外的字符 次 并且它起作用了。

我也尝试了一个更大的带有英文字符的字符串,它也被列出了。

我的问题是 - 从 JSch 的角度来看,字符长度是否有任何限制,因为我可以通过在服务器本身上执行 dir 来列出这两个文件。

下面的代码片段供参考,对于给定的文件夹路径列表,文件被添加到列表中。

谢谢你的帮助!

0 投票
0 回答
79 浏览

vim - 如何将多字节字符简单地视为一个字节序列?

我想将 vim 与二进制文件一起使用。我运行 run vim with-b我有isprint =and display += uhex。我正在使用以下内容statusline

%<%f\ %h%m%r%=%o\ (0x%06O)\ \ %3.b\ <%02B>\ %7P

所以我得到的输出包含一些有用的信息,比如文件中的字节偏移量和十六进制的当前字符等。但是我遇到了将随机数据片段解释为多字节字符的问题,这些字符阻止我访问内部字节,结合周围环境(包括 vim 的装饰)或显示为�。

当然我试过用++enc=latin1. 但是,我的系统编码是 UTF-8,所以 vim 应该做的是在内部将文件从 Latin-1 转换为 UTF-8 并显示它。这有两个问题:

  • 该序列<c3><ac>显示为ì,而不是ì,但每个字符都计为两个字节,因此它破坏了 my%o并且计算了错误的偏移量。这是文件中的 2 个字节,但在 vim 的缓冲区中显然是 4 个字节。
  • 我不知道为什么我isprint的被忽略了。这些字符都不在 32 到 126 之间,因此它们应该以十六进制显示。

我找到了以下解决方法:我设置encodinglatin1, 但设置termencodingutf-8. 这实现了我想要的,但破坏了其他事情,比如当 vim 需要以我的语言显示状态消息(“新文件”、“更改”等)时,因为它也想为它们使用编码并且它们不适合. 我想我可以运行 vim,LC_ALL=C但感觉我已经在使用太多肮脏的把戏了。有没有更好的方法,即不必乱来encoding

0 投票
1 回答
208 浏览

json - 单字节 Oracle 环境中的多字节字符存储(在 BLOB 中)和搜索(使用 JSON 函数)

详细信息:Oracle 数据库 12c,数据库版本:12.1.0.2.0

问题描述及要求:

第1部分 :

  1. 我将 JSON 数据存储在 NCLOB 列中。
  2. 我需要从 JSON 数据中搜索文本。
  3. 考虑到性能,我可以选择使用数据类型 BLOB,因为数据是 JSON 并且在 BLOB 列中。我可以使用 JSON 索引全文搜索。

与 NCLOB 上的简单查询 (LIKE) 相比,在 BLOB 列上使用 JSON 文本搜索索引进行搜索时,性能显着提高,因此使用 BLOB 列。

关于 JSON 搜索索引:

JSON 搜索索引是一种专门针对 JSON 数据的全文索引。优化器仅在数据库使用AL32UTF8 或 WE8ISO8859P1 字符集时才考虑使用索引,并且仅适用于 VARCHAR2、BLOB 或 CLOB 列中的 JSON 数据,而不是 NVARCHAR2 和 NCLOB 列

第2部分 :

我们有两种数据库类型,即单字节和多字节部署

单字节字符集:

NLS_NCHAR_CHARACTERSET--->AL16UTF16, NLS_CHARACTERSET------>WE8MSWIN1252

多字节字符集:

NLS_NCHAR_CHARACTERSET--->AL16UTF16, NLS_CHARACTERSET------>AL32UTF8

第 3 部分:

在多字节部署中,我能够存储和搜索(使用 JSON_TEXTCONTAINS)多字节文本,例如 'məharaːʂʈrə'。原因:因为数据库使用 AL32UTF8(BLOB 列)字符集 注意:JSON_TEXTCONTAINS 仅适用于索引。

在单字节部署中,我无法存储相同的文本,即 'məharaːʂʈrə'(由于它是多字节的,转换会导致数据丢失,例如 'm?hara???r?')

问题:如何在具有字符集的单字节部署的BLOB列中存储多字节数据,即'məharaːʂʈrə':WE8MSWIN1252。

如 oracle 所述:如果数据库使用AL32UTF8 或 WE8ISO8859P1 字符集,优化器只会考虑使用索引 请注意,我也可以在单字节环境中使用 JSON 搜索索引,即 JSON_TEXTCONTAINS(对于简单搜索,即单字节)。

一旦我能够按原样存储数据,我将能够使用 JSON_TEXTCONTAINS 进行搜索。

示例代码(在单字节和多字节部署中尝试:请注意:https ://livesql.oracle.com/是多字节部署。

创建表:

数据应该是严格的 Json(所以我们可以用点符号遍历):

创建索引:

插入简单的json

如果有任何错误(单字节),请将其转换:

存储值:

观察:在单字节环境下会导致数据丢失。

现在搜索:

观察:多字节将产生行,但单字节将不会产生行。

也能够在单字节环境中使用 JSON 搜索索引,即 JSON_TEXTCONTAINS(对于简单搜索,即单字节)——下面的查询结果为一行:

0 投票
1 回答
136 浏览

c++ - 打印包含多字节字符的固定宽度字符串

我有一些以多字节 UTF8 格式存储的字符串,我想在固定宽度的空间中将它们打印到控制台。我这样做是:

文件名变量采用 ASCII 格式并且工作正常,但如果 titleUTF 变量包含任何多字节字符,它们将打印得太短。我认为这是因为 wprintf 函数在计算宽度时包含了多字节字符的每个字节。请参阅下面的输出:

在此处输入图像描述

THPS2 标题中的“破折号”字符实际上是一个半角日文字符,这就是在这种情况下破坏 wprintf 函数的原因。

我试过使用“%-32lS”,但这会将垃圾打印到控制台,我试过小写的“s”,但这也会打印垃圾。任何想法如何即使使用多字节字符也能获得固定宽度的打印?

编辑:

这是一个屏幕截图,显示了内存中的 titleUDF 变量,以及有问题的“THPS2”字符串字节:

在此处输入图像描述

如您所见,“破折号”字符表示为 0xef 0xbd 0xb0

值得注意的是,我必须调用:

让多字节字符正确显示。此外,我必须将控制台中的字体更改为具有这些字符字形的字体。我使用 NSimSun。