相关疑难解决方法(0)

为什么在Rust中将字符串的第一个字母大写如此复杂?

我想把a的第一个字母大写&str.这是一个简单的问题,我希望有一个简单的解决方案.直觉告诉我做这样的事情:

let mut s = "foobar";
s[0] = s[0].to_uppercase();
Run Code Online (Sandbox Code Playgroud)

但是&strs不能像这样编入索引.我能够做到这一点的唯一方法似乎过于复杂.我将转换&str为迭代器,将迭代器转换为向量,大写为向量中的第一项,它创建了一个迭代器,我将其编入索引,创建一个Option,我打开它给我一个上面的首字母.然后我将矢量转换为迭代器,我将其转换为a String,我将其转换为a &str.

let s1 = "foobar";
let mut v: Vec<char> = s1.chars().collect();
v[0] = v[0].to_uppercase().nth(0).unwrap();
let s2: String = v.into_iter().collect();
let s3 = &s2;
Run Code Online (Sandbox Code Playgroud)

有没有比这更简单的方法,如果有,那又怎样?如果没有,为什么Rust以这种方式设计?

类似的问题

string rust uppercase

58
推荐指数
5
解决办法
5478
查看次数

Python:以字节为单位获取字符串的大小

我有一个要通过网络发送的字符串.我需要检查它所代表的总字节数.

sys.getsizeof(string_name)返回额外的字节.例如,对于sys.getsizeof("a")返回22,而一个字符仅在python中以1个字节表示.还有其他方法可以找到这个吗?

python

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

如何在PHP中迭代UTF-8字符串?

如何使用索引逐字符迭代UTF-8字符串?

当您使用括号运算符访问UTF-8字符串时,$str[0]utf编码的字符由2个或更多元素组成.

例如:

$str = "K?t";
$str[0] = "K";
$str[1] = "?";
$str[2] = "?";
$str[3] = "t";
Run Code Online (Sandbox Code Playgroud)

但我希望:

$str[0] = "K";
$str[1] = "?";
$str[2] = "t";
Run Code Online (Sandbox Code Playgroud)

这是可能的,mb_substr但这是非常缓慢的,即.

mb_substr($str, 0, 1) = "K"
mb_substr($str, 1, 1) = "?"
mb_substr($str, 2, 1) = "t"
Run Code Online (Sandbox Code Playgroud)

是否有另一种方法来逐字符串字符串而不使用mb_substr

php utf-8

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

计算Java String的UTF-8长度而不实际编码它

有谁知道标准Java库(任何版本)是否提供了一种计算字符串二进制编码长度的方法(在本例中为UTF-8)而不实际生成编码输出?换句话说,我正在寻找一个有效的等价物:

"some really long string".getBytes("UTF-8").length
Run Code Online (Sandbox Code Playgroud)

我需要为潜在的长序列化消息计算长度前缀.

java utf-8

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

声明字符时char和int之间的区别

我刚刚开始学习C,并且对使用int和char声明字符感到困惑.

我很清楚任何字符都是由整数组成的,因为字符的"整数"是字符的各自的ASCII小数.

也就是说,我了解到完全可以在int不使用ASCII小数的情况下声明一个字符.例如.将变量声明test为字符'X'可以写为:

char test = 'X';
Run Code Online (Sandbox Code Playgroud)

int test = 'X';
Run Code Online (Sandbox Code Playgroud)

对于两个字符的声明,转换字符都是%c(即使测试被定义​​为int).

因此,我的问题是/是否使用声明字符变量charint使用何时声明字符变量之间的区别int

c

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

给定 UTF-16 大小的最大 UTF-8 字符串大小

确定对给定数量的 UTF-16 代码单元进行编码所需的最大 UTF-8 字节数(即String.LengthC# / .NET 中的值)的公式是什么?

我看到三种可能性:

  1. # of UTF-16 code units x 2

  2. # of UTF-16 code units x 3

  3. # of UTF-16 code units x 4

UTF-16 代码点由 1 个或 2 个代码单元表示,因此我们只需要考虑字符串填充其中一个或另一个的最坏情况。如果 UTF-16 字符串完全由 2 个代码单元代码点组成,那么我们知道 UTF-8 表示的大小最多相同,因为代码点在两种表示中最多占用 4 个字节,因此最坏的情况就是上面的选项(1)。

因此,需要考虑的一个有趣的情况(我不知道答案)是单个代码单元 UTF-16 代码点在 UTF-8 表示中可能需要的最大字节数。

如果所有单个代码单元 UTF-16 代码点都可以用 3 个 UTF-8 字节表示(我的直觉告诉我这是最有意义的),那么选项 (2) 将是最坏的情况。如果有任何需要 4 个字节,则选项 (3) 将是答案。

有人知道哪个是正确的吗?我真的希望(1)或(2)因为(3)会让事情变得更加困难:/

更新

据我所知,UTF-16 以单个代码单元对 BMP 中的所有字符进行编码,而所有其他平面以 2 个代码单元进行编码。

看来UTF-8可以在3个字节内编码整个BMP,并使用4个字节来编码其他平面。

因此,在我看来,上面的选项(2)是正确的答案,这应该有效:

string str = "Some string";
int …
Run Code Online (Sandbox Code Playgroud)

.net c# utf-8 utf-16 character-encoding

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

是否可以在不逐行缓存输入的情况下从 `io::stdin()` 中读取字符?

这个问题指的是稳定的 Rust 版本1.2.0

我只想遍历 CLI 应用程序标准输入中的字符。完全有可能将 readstdinread_line方法放入一个临时String实例中,然后迭代它的chars()迭代器。

但我不喜欢这种方法,因为它分配了一个完全不必要的String对象。Stdintrait 的文档实现了Readtrait,它有 chars()迭代器,但它被标记为不稳定(因此不能与稳定的编译器版本一起使用)。

是否有另一种可能不太明显的方式来逐个字符地读取 stdin,而无需任何额外的 Rust 端缓冲?

string stdin rust

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

“ TEXT”列中可以容纳多少个多字节字符?

根据文档(重点是我的):

TEXT [(M)] [CHARACTER SET charset_name] [COLLATE collat​​ion_name]

一个TEXT列,最大长度为65,535(216?1)个字符。如果该值包含多字节字符,则有效最大长度会更少。每个TEXT值使用2字节长的前缀存储,该前缀指示值中的字节数。

说一TEXT列可以存储65535 个字节会更准确吗?TEXT列中多字节字符的具体影响是什么?

这是我困惑的根源:

在MySQL 5,CHAR并且VARCHAR场被改变为使他们算的字符,而不是字节(例如,你能适应“??????”成VARCHAR(6))。难道TEXT领域得到同样的待遇,或者他们仍然算个字节?

mysql

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

如何将String解析为二进制并将其转换为Java中的UTF-8等价物?

我需要将String内容解析为二进制序列,并将它们转换为UTF-8等效String.

例如,B,AR的UTF-8二进制当量如下:B = 01000010 A = 01000001 R = 01010010



现在,我需要将字符串"010000100100000101010010"转换为字符串"BAR",
对于上述情况,输入24个字符的字符串被分成三个相等的部分(每个部分中有8个字符)并转换为其UTF-8等价物作为字符串值.

示例代码:

public static void main(String args[]) {
    String B = "01000010";
    String A = "01000001";
    String R = "01010010";
    String BAR = "010000100100000101010010";

    String utfEquiv = toUTF8(BAR);//expecting to get "BAR"
    System.out.println(utfEquiv);
}

private static String toUTF8(String str) {
    // TODO 
    return "";
}
Run Code Online (Sandbox Code Playgroud)

什么应该是方法toUTF8(String str){}的实现

java string encode utf-8

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

UTF-8 编码显示字符的最大代码点数是多少?

我们试图将表情符号插入数据库,但遇到了奇怪的行为。事实证明这与utf-8编码有关。会工作得很好,但不会。这是我们了解 utf-8 代码点的时候。是一个代码点长,但为 2:由 Hot Pepper (U+1F336) 和 Variation Selector-16 (U+FE0F) 组成。

\n

了解这一点后,我们将数据库存储宽度增加到2,这解决了 的问题,但我们发现了一个新问题。键帽表情符号 (1\xef\xb8\x8f\xe2\x83\xa32\xef\xb8\x8f\xe2\x83\xa33\xef\xb8\x8f\xe2\x83\xa3) 为 3 个字符:1 个 (U+31 )、变体选择器-16 (U+FE0F) 和组合封闭键帽 (U+20E3)。

\n

“好吧,”我们说,“把它增加到 4。” 然后 \xe2\x80\x8d\xe2\x99\x82\xef\xb8\x8f 带有 5 个代码点:Face Palm (U+1F926)、表情符号修改器 Fitzpatrick Type-3 (U+1F3FC)、零宽度连接器 ( U+200D)、男性符号 (U+2642) 和变体选择器-16 (U+FE0F)。我们进行了更多尝试,发现英格兰国旗由 7 个代码点组成:

\n
    \n
  • U+1F3F4:飘扬的黑旗
  • \n
  • U+E0067:标签拉丁文小写字母 G
  • \n
  • U+E0062:标签拉丁小写字母 B
  • \n
  • U+E0065:标签拉丁文小写字母 E
  • \n
  • U+E006E:标签拉丁文小写字母 N
  • \n
  • U+E0067:标签拉丁文小写字母 G
  • \n
  • U+E007F:取​​消标签
  • \n
\n

所以问题是,显示的 unicode 字符可以使用的最大代码点数量是多少?是否有任何代码点高于 7 个的表情符号(或其他 utf-8 字符)示例?

\n

此问题与问题UTF-8 编码字符的最大字节数是多少?类似但不同。。这需要一个 UTF-8 代码点,最大字节数是多少?(剧透:4)。 …

utf-8

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

标签 统计

utf-8 ×5

string ×3

java ×2

rust ×2

.net ×1

c ×1

c# ×1

character-encoding ×1

encode ×1

mysql ×1

php ×1

python ×1

stdin ×1

uppercase ×1

utf-16 ×1