标签: multibyte-functions

Windows API:ANSI和宽字符串 - 是UTF8还是ASCII?UTF-16或UCS-2 LE?

我不太喜欢编码,但这是我认为我知道的(虽然它可能是错的):

  1. ASCII是一种7位固定长度编码,您可以在ASCII图表中找到这些字符.
  2. UTF8是一种8位可变长度编码.所有字符都可以用UTF8编写.
  3. UCS-2 LE/BE是固定长度的16位编码,支持大多数常见字符.
  4. UTF-16是一种16位可变长度编码.所有字符都可以用UTF16编写.

这些都是正确的吗?

现在,对于问题:

  1. Windows"A"函数(如SetWindowTextA)是否采用ASCII字符串?或"多字节字符串"(下面有更多问题)?
  2. Windows"W"函数是否采用UTF-16字符串或UCS-2字符串?我认为他们接受了UCS-2,但名字让我感到困惑.
  3. WideCharToMultiByte中,Microsoft使用"宽字符串"一词表示UTF-16.在那种情况下,那么什么被认为是"多字节字符串"?UTF-8?
  4. LPWSTR一个"宽字符串"?我会说它是,但那么,这不意味着它是UTF-16吗?并不意味着它可以用于显示4字节字符?如果没有,那么...显示4字节字符是不可能的?(Windows似乎没有那些API.)
  5. 是那个WideCharToMultiByte超集的功能,wcstombs它们是否都在相同类型的字符串上工作?或者说,其中一个工作在UTF-16上,而另一个工作在UCS-2上?
  6. 文件路径是UTF-16还是UCS-2?我知道Windows将其视为Microsoft文档中的"不透明字符数组",但根据C标准的功能fwprintf,是否有任何标准化编码?
  7. 什么是"ANSI"编码?这甚至是一个正确的术语吗?它与ASCII有什么关系?
  8. (我有更多的问题,但这已经足够了......无论如何我忘记了其中的一些......)

这些是很多问题,所以任何关于所有这些连接的解释的链接(除了阅读Unicode标准,无论如何都不会帮助Windows API)也将非常感激.

谢谢!

unicode winapi ascii multibyte-functions widechar

31
推荐指数
3
解决办法
9409
查看次数

mb_convert_encoding,启用mbstring时未定义的函数

我有一个运行PHP 5.3.8与Apache2/MySQL的服务器(Ubuntu 11.10 x64).我正在开发一个项目,我需要做一些特定的字符编码,但我发现没有多字节(mb_*函数)正常工作.

但是,当我查看phpinfo()时,我看到启用了多字节支持.

我尝试过像apt-get install php5-mbstring,php-mbstring,php-multibyte等等,但似乎都没有用.

任何人都能指出我正确的方向吗?提前致谢!

编辑:通过重新编译PHP修复它(这是我最后的手段,我最初想避免)

./configure --enable-mbstring

奇怪的是,phpinfo()已经显示它已启用.我不知道为什么它之前没有用:/

php multibyte-functions

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

php sprintf()与外国字符?

像sprintf一样的接缝有外包字符的问题吗?还是我做错了什么?看起来它在从字符串中移除像åäö这样的字符时起作用了.这有必要吗?

我希望为报告正确对齐以下行:

2011-11-27   A1823    -Ref. Leif  -           12 873,00    18.98
2011-11-30   A1856    -Rättat xx -            6 594,00    19.18
Run Code Online (Sandbox Code Playgroud)

我正在使用这样的sprintf():% - 12s% - 8s - % - 10s - %20s%8.2f

使用:php-5.3.23-nts-Win32-VC9-x86

php printf utf-8 multibyte-functions

20
推荐指数
2
解决办法
9142
查看次数

PHP Multi Byte str_replace?

我正在尝试在PHP中进行重音字符替换但得到时髦的结果,我的猜测是因为我使用UTF-8字符串并且str_replace无法正确处理多字节字符串..

$accents_search     = array('á','à','â','ã','ª','ä','å','Á','À','Â','Ã','Ä','é','è',
'ê','ë','É','È','Ê','Ë','í','ì','î','ï','Í','Ì','Î','Ï','œ','ò','ó','ô','õ','º','ø',
'Ø','Ó','Ò','Ô','Õ','ú','ù','û','Ú','Ù','Û','ç','Ç','Ñ','ñ'); 

$accents_replace    = array('a','a','a','a','a','a','a','A','A','A','A','A','e','e',
'e','e','E','E','E','E','i','i','i','i','I','I','I','I','oe','o','o','o','o','o','o',
'O','O','O','O','O','u','u','u','U','U','U','c','C','N','n'); 

$str = str_replace($accents_search, $accents_replace, $str);
Run Code Online (Sandbox Code Playgroud)

结果我得到:

Ørjan Nilsen -> ?orjan Nilsen
Run Code Online (Sandbox Code Playgroud)

预期结果:

Ørjan Nilsen -> Orjan Nilsen
Run Code Online (Sandbox Code Playgroud)

编辑:我的内部字符处理程序设置为UTF-8(根据mb_internal_encoding()),$ str的值也是UTF-8,所以从我所知,所涉及的所有字符串都是UTF-8.str_replace()是否检测到char集并正确使用它们?

php string replace multibyte-functions

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

用于替换preg_match_all的多字节函数?

我正在寻找一个要替换的多字节函数preg_match_all().我需要一个能给我一个匹配字符串数组的字符串,比如$matches来自的参数preg_match().该函数mb_ereg_match()似乎没有这样做 - 它只给我一个布尔值,表明是否有任何匹配.

查看mb_*函数页面,我不会随便看到替代功能的任何东西preg_match().我该用什么?

编辑我是个白痴.我最初发布这个问题要求更换preg_match,当然是ereg_match.但是这两者都只返回第一个结果.我想要的是替换preg_match_all,它返回所有匹配文本.但无论如何,正如hakre指出的那样,u修饰语在我的情况下preg_match_all起作用.

php regex multibyte multibyte-functions

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

使用`strstr`在字符串中搜索多字节UTF-8字符是否安全?

按照我之前的问题:为什么`strchr`似乎与多字节字符一起工作,尽管手册免责声明?,我发现这strchr是一个糟糕的选择.

相反,我正在考虑使用strstr寻找单个字符(不是多字节char):

const char str[] = "This string contains é which is a multi-byte character";
char * pos = strstr(str, "é"); // 'é' = 0xC3A9: 2 bytes 
printf("%s\n", pos);
Run Code Online (Sandbox Code Playgroud)

输出继电器:

é是一个多字节字符

这是我所期望的:我的多字节字符的第一个字节的位置.

先验,这不是规范使用,strstr但似乎运作良好.
这种解决方法安全吗?你能想到会导致错误的任何副作用或特殊情况吗?

[编辑]:我应该确切地说我不想使用wchar_t类型,我处理的字符串是UTF-8编码的(我知道这个选择可以讨论,但这是一个无关紧要的辩论)

c string utf-8 multibyte-functions

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

libc regcomp和regexec中的多字节字符

有没有得到正则libc6表达式函数regcompregexec使用多字节字符正常工作?

例如,如果我的模式是utf8字符??+?,则在utf8编码的字符串上找到匹配?????将失败,它应该成功.

我认为这是因为字符?的字节表示是\xe6\x9c\xba,并且+匹配一个或多个字节\xba.我可以通过在模式中的每个多字节字符周围加括号来使这个实例工作,但由于这是一个应用程序,我不能要求用户这样做.

有没有办法标记一个模式或字符串匹配为包含utf8字符?也许告诉libc将模式存储为wchar而不是char?

regex glibc utf-8 libc multibyte-functions

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

在PHP中使用UTF-8字符集 - 是否需要mb函数?

这几天我一直在努力将我的PHP代码库从latin1转换为UTF-8.我已经读过两个主要的解决方案是用内置的多字节函数替换单字节函数,或者在php.ini文件中设置mbstring.func_overload值.

但后来我遇到了关于堆栈溢出的这个线程,其中thomasrutter的帖子似乎表明UTF-8实际上不需要多字节函数,只要脚本和字符串文字以UTF-8编码即可.

我还没有找到任何其他证据证明这是否属实,如果事实证明我不需要将我的代码转换为mb_functions那么这将是一个真正的节省时间!有人能够对此有所了解吗?

php utf-8 multibyte-functions

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

从多字节字符串中剥离重复字符的PHP方法?

Arrrgh.有谁知道如何创建一个与PHP count_chars($ string,3)命令等效的多字节字符的函数?

这样它将返回每个唯一字符的唯一一个实例的列表.如果那是英语而且我们有

"aaabggxxyxzxxgggghq xcccxxxzxxyx"

它将返回"abgh qxyz"(注意空间被计算).

(在这种情况下,顺序并不重要,可以是任何东西).

如果日本汉字(不确定浏览器都支持这个):

汉汉汉字汉字私私字私字汉字私汉字汉字私

它将只返回使用的3个汉字:

汉字私

它需要处理任何UTF-8编码的字符串.

php multibyte-functions

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

如何在Python中处理多字节字符串

PHP中有多字节字符串函数来处理多字节字符串(例如:CJK脚本).例如,我想通过len在python中使用函数计算多字节字符串中的字母数,但它返回一个不准确的结果(即此字符串中的字节数)

japanese = "???????"
print japanese
print len(japanese)#return 21 instead of 7
Run Code Online (Sandbox Code Playgroud)

在PHP中是否有像mb_strlen这样的包或函数?

python string multibyte multibyte-functions

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

标签 统计

multibyte-functions ×10

php ×6

utf-8 ×4

string ×3

multibyte ×2

regex ×2

ascii ×1

c ×1

glibc ×1

libc ×1

printf ×1

python ×1

replace ×1

unicode ×1

widechar ×1

winapi ×1