如何在Visual C中获取多字节字符串的字节大小?有功能还是我必须自己计算角色?
或者,更一般地说,如何获得TCHAR字符串的正确字节大小?
解:
_tcslen(_T("TCHAR string")) * sizeof(TCHAR)
Run Code Online (Sandbox Code Playgroud)
编辑:
我只讨论以空字符结尾的字符串.
我有这个代码:
$string = '???';
echo strlen($string);
Run Code Online (Sandbox Code Playgroud)
由于$string有3个波斯字符,输出必须是3但我得到6.
???有3个字符.为什么我的输出是6?
如何strlen()在php中使用具有实际输出的波斯语?
我试图在字符串过滤器中使用此方法:
public function truncate($string, $chars = 50, $terminator = ' …');
Run Code Online (Sandbox Code Playgroud)
我期待这个
$in = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ1234567890";
$out = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV …";
Run Code Online (Sandbox Code Playgroud)
还有这个
$in = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ??????????????????????????????";
$out = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ?????????????????? …";
Run Code Online (Sandbox Code Playgroud)
这是$chars减去$terminator字符串的字符.
此外,滤波器应该在$chars极限以下的第一个字边界切割,例如
$in = "Answer to the Ultimate Question of Life, the Universe, and Everything.";
$out = "Answer to the Ultimate Question of Life, the …";
Run Code Online (Sandbox Code Playgroud)
我很确定这应该适用于这些步骤
但是,我现在尝试了各种组合str*和mb_*功能,但都产生了错误的结果.这不是那么困难,所以我显然缺少一些东西.有人会为此分享一个有效的实现,或者指向一个资源,我终于可以理解如何做到这一点.
谢谢
PS是的,我之前已经检查过https://stackoverflow.com/search?q=truncate+string+php :)
我试图提出以下函数将字符串截断为整个单词(如果可能,否则它应截断为字符):
function Text_Truncate($string, $limit, $more = '...')
{
$string = trim(html_entity_decode($string, ENT_QUOTES, 'UTF-8'));
if (strlen(utf8_decode($string)) > $limit)
{
$string = preg_replace('~^(.{1,' . intval($limit) . '})(?:\s.*|$)~su', '$1', $string);
if (strlen(utf8_decode($string)) > $limit)
{
$string = preg_replace('~^(.{' . intval($limit) . '}).*~su', '$1', $string);
}
$string .= $more;
}
return trim(htmlentities($string, ENT_QUOTES, 'UTF-8', true));
}
Run Code Online (Sandbox Code Playgroud)
以下是一些测试:
// Iñtërnâtiônàlizætiøn and then the quick brown fox... (49 + 3 chars)
echo dyd_Text_Truncate('Iñtërnâtiônàlizætiøn and then the quick brown fox jumped overly the lazy dog and one …Run Code Online (Sandbox Code Playgroud) 我有一个22字节的帧.帧是来自加速度计的输入流,通过蓝牙.加速度计读数是一个16位数,分为两个字节.
当我尝试将字节与缓冲区[1] +缓冲区[2]合并,而不是添加字节时,它只是将结果并排放置.所以1 + 2 = 12.
有人能告诉我如何组合这两个字节来获得原始数字.(顺便说一句,字节是以小端发送的)
谢谢
多字节字符给我带来了很多痛苦.
对此问题的任何建议?
我有一个可能包含一些多字节字符的CLOB字段,我需要在SQL中选择并将此字段转换为下游进程的字符串,目前我正在使用:
SELECT DBMS_LOB.SUBSTR( description, 4000, 1 ) FROM table
Run Code Online (Sandbox Code Playgroud)
但上面的4000命令是字符长度,而不是字节.所以我不得不改为3000来处理任何可能已经悄悄进入数据的多字节字符,否则将发生缓冲区大小错误.
问题是对于不包含多字节字符的记录,可能会不必要地截断超出需要的数据.(4000是字符串限制,我们可以/不得不忍受.)
有没有办法做相当于以下的事情:
SELECT DBMS_LOB.SUBSTR( description, 4000bytes, 1 ) FROM table
Run Code Online (Sandbox Code Playgroud)
这样我就可以获得尽可能多的数据.
注意:我不允许创建临时表/视图,不使用PL/SQL,只允许SQL SELECT ...
我试图使用preg_replace ?从字符串输入中消除日语全宽白色空格" "但我最终得到一个损坏的多字节字符串.
我更喜欢preg_replace而不是str_replace.这是一个示例代码:
$keywords = '?????';
$keywords = str_replace(array(' ', '?'), ' ', urldecode($keywords)); // outputs :'????'
$keywords = preg_replace("@[ ?]@", ' ',urldecode($keywords)); // outputs :'?? ????'
任何人都知道为什么会这样,以及如何纠正这种情况?
我正在努力让R读取一个csv文件,其中一些列标准英文字符,一些数字和一些日文字符字段.这是数据的样子:
category,desc,otherdesc,volume
UPC - 31401 Age Itameabura,???????????,OIL_OTHERS_SML_ECO,83.0
UPC - 31401 Age Itameabura,???????,OIL_OTHERS_MED,137.0
UPC - 31401 Age Itameabura,????????,OIL_CANOLA_OTHERS_LRG,3026.0
Run Code Online (Sandbox Code Playgroud)
将R的语言设置为英语,将日语字符转换为一些乱码.当我将R中的语言设置更改为日语时Sys.setlocale("LC_CTYPE", "japanese"),我看到文件根本没有被读入.R给出错误说:
make.names出错(col.names,unique = TRUE):'サ类'中的多字节字符串无效
我不知道我的csv文件或标题名称有什么问题.您能否指导我如何将此csv文件读入R中,以便所有内容都像在csv文件中一样显示?
谢谢!Vish
嘿伙计们怎么样?我刚刚完成了我的服务器的Os重载,我已经恢复了所有的东西,所有数据都是正确的,但我得到了这个:
致命错误:调用未定义的函数mb_strtolower()
我已经做了一些搜索,我发现它的mbstring exsttention for php没有安装,这似乎不是我的情况,因为我检查并安装并启用所有phpversion
任何人有任何想法?
在我研究C和C++中的字符编码时,我遇到了两种常见的编码方式:多字节字符和宽字符.为了加强我对这些系统的理解(利弊),我想做一些例子.由于wchar_t类型的本机支持,使用宽字符执行示例不是问题.但是当我想创建一个包含那些所谓的多字节字符的字符串时,我遇到了一个问题.
我怎样才能实际创建一个多字节字符串,该字符串使用与char数组一起使用的编码(使用Visual C++)?确实存在这种编码:http://www.gnu.org/software/libc/manual/html_node/Shift-State.html.但我只阅读它,从未见过一个真实的例子.或者你必须为这种字符串创建自己的编码?