标签: character-set

检查单个UnicodeScalar的CharacterSet会产生奇怪的行为

在与CharacterSet我合作时遇到了一个有趣的问题.从我到目前为止收集的CharacterSet是基于UnicodeScalar; 您可以使用标量初始化它并检查集合中是否包含标量.查询集合以查明它是否包含a Character,谁的字形可能由几个unicode标量值组成,这没有意义.

我的问题在于我使用表情符号测试,这是一个单一的unicode标量值(十进制128518).因为这是一个单一的unicode标量值,我认为它会起作用,结果如下:

"" == UnicodeScalar(128518)! // true

// A few variations to show exactly what is being set up
let supersetA = CharacterSet(charactersIn: "")
let supersetB = CharacterSet(charactersIn: "A")
let supersetC = CharacterSet(charactersIn: UnicodeScalar(128518)!...UnicodeScalar(128518)!)
let supersetD = CharacterSet(charactersIn: UnicodeScalar(65)...UnicodeScalar(65)).union(CharacterSet(charactersIn: UnicodeScalar(128518)!...UnicodeScalar(128518)!))

supersetA.contains(UnicodeScalar(128518)!) // true
supersetB.contains(UnicodeScalar(128518)!) // false
supersetC.contains(UnicodeScalar(128518)!) // true
supersetD.contains(UnicodeScalar(128518)!) // false
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,如果CharacterSet包含单个标量值(可能是由于优化),则检查有效,但在任何其他情况下,它都无法按预期工作.

我找不到任何有关较低级别实现的信息,CharacterSet或者它是否以某种编码工作(即UTF-16之类的NSString),但由于API处理很多,UnicodeScalar我很惊讶它失败了,我不确定为什么会发生这种情况,或者如何进一步调查.

任何人都可以阐明为什么会这样吗?

foundation swift character-set

3
推荐指数
1
解决办法
224
查看次数

为什么需要在索引中添加“0”才能访问数组值?

我对这一行感到困惑:

sum += a[s[i] - '0']; 
Run Code Online (Sandbox Code Playgroud)

给出一些上下文,这是代码的其余部分:

#include <iostream>

using namespace std;

int main() {

    int a[5];
    for (int i = 1; i <= 4; i++)
        cin >> a[i];
    string s;
    cin >> s;
    int sum = 0;
    for (int i = 0; i < s.size(); i++)
        sum += a[s[i] - '0'];
    cout << sum << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ char indices character-set

3
推荐指数
1
解决办法
137
查看次数

单个标签能否覆盖特定字符集中的字符集 (0008,0005)

如果我创建一个具有基本单字节特定字符集(如 (0008,0005) = ISO_IR 100)的 DICOM 对象,其中一个标签可以使用不同的 2 字节字符集吗?例如,患者姓名 (0010,0010) 可以用简体中文 (ISO 2022 IR 58) 编码吗?

dicom character-set

3
推荐指数
1
解决办法
335
查看次数

如何打印CharacterSet.decimalDigits的内容?

我尝试打印内容CharacterSet.decimalDigits

print(CharacterSet.decimalDigits)
Run Code Online (Sandbox Code Playgroud)

输出:CFCharacterSet 预定义十进制数字集

但我的期望是这样的:

[1,2,3,4...]

所以我的问题是:如何打印 的内容CharacterSet.decimalDigits

swift character-set

2
推荐指数
1
解决办法
3089
查看次数

更改 MySQL 数据库的字符集和排序规则时,现有索引是否会受到影响

  1. 我们有一个数据库,其中表和列的默认字符集设置为utf8编码
  2. 但是使用utf8字符集编码,我们无法保存表情符号
  3. 为了支持保存表情符号,a) 我们必须将表和列的字符集更改为utf8mb4 b) 我们必须将表和列的排序规则更改为 utf8mb4_unicode_ci c) 更新我们的 JDBC 驱动程序,使其支持 unicode 编码

通过上述更改,我们可以将表情符号保存在我们的列中。

问题: 1)我是否需要删除现有索引(varchar 列)并重新创建索引,如之前使用 utf8 每个字符占用 3 个字节,现在使用 utf8mb4 编码它将占用 4 个字节?

mysql database collation character-encoding character-set

1
推荐指数
1
解决办法
1514
查看次数

如何将 STRING 变量编码到给定的代码页中

我有一个字符串变量,其中包含我需要在代码页中编码并写入文件的文本UTF-16LE

目前,以下代码生成一个UTF-8文件,但我在语句中没有看到任何选项OPEN DATASET来生成UTF-16LE.

REPORT zmyprogram.

DATA(filename) = `/tmp/myfile`.

OPEN DATASET filename IN TEXT MODE ENCODING DEFAULT FOR OUTPUT.

TRANSFER 'HELLO WORLD' TO filename.

CLOSE DATASET filename.
Run Code Online (Sandbox Code Playgroud)

我想一种解决方案是首先在内存中对字符串进行编码,然后将编码后的字节写入文件。

一般来说,如何将一串字符编码到内存中给定的代码页中?

abap character-encoding codepages character-set

1
推荐指数
1
解决办法
2万
查看次数