我想把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以这种方式设计?
我有一个要通过网络发送的字符串.我需要检查它所代表的总字节数.
sys.getsizeof(string_name)返回额外的字节.例如,对于sys.getsizeof("a")返回22,而一个字符仅在python中以1个字节表示.还有其他方法可以找到这个吗?
如何使用索引逐字符迭代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?
有谁知道标准Java库(任何版本)是否提供了一种计算字符串二进制编码长度的方法(在本例中为UTF-8)而不实际生成编码输出?换句话说,我正在寻找一个有效的等价物:
"some really long string".getBytes("UTF-8").length
Run Code Online (Sandbox Code Playgroud)
我需要为潜在的长序列化消息计算长度前缀.
我刚刚开始学习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).
因此,我的问题是/是否使用声明字符变量char和int使用何时声明字符变量之间的区别int?
确定对给定数量的 UTF-16 代码单元进行编码所需的最大 UTF-8 字节数(即String.LengthC# / .NET 中的值)的公式是什么?
我看到三种可能性:
# of UTF-16 code units x 2
# of UTF-16 code units x 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) 根据文档(重点是我的):
TEXT [(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
一个TEXT列,最大长度为65,535(216?1)个字符。如果该值包含多字节字符,则有效最大长度会更少。每个TEXT值使用2字节长的前缀存储,该前缀指示值中的字节数。
说一TEXT列可以存储65535 个字节会更准确吗?TEXT列中多字节字符的具体影响是什么?
这是我困惑的根源:
在MySQL 5,CHAR并且VARCHAR场被改变为使他们算的字符,而不是字节(例如,你能适应“??????”成VARCHAR(6))。难道TEXT领域得到同样的待遇,或者他们仍然算个字节?
我需要将String内容解析为二进制序列,并将它们转换为UTF-8等效String.
例如,B,A和R的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){}的实现
我们试图将表情符号插入数据库,但遇到了奇怪的行为。事实证明这与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所以问题是,显示的 unicode 字符可以使用的最大代码点数量是多少?是否有任何代码点高于 7 个的表情符号(或其他 utf-8 字符)示例?
\n此问题与问题UTF-8 编码字符的最大字节数是多少?类似但不同。。这需要一个 UTF-8 代码点,最大字节数是多少?(剧透:4)。 …