ISO 8859-1 West European languages (Latin-1)
ISO 8859-2 Central and East European languages (Latin-2)
ISO 8859-3 Southeast European and miscellaneous languages (Latin-3)
ISO 8859-4 Scandinavian/Baltic languages (Latin-4)
ISO 8859-5 Latin/Cyrillic
ISO 8859-6 Latin/Arabic
ISO 8859-7 Latin/Greek
ISO 8859-8 Latin/Hebrew
ISO 8859-9 Latin-1 modification for Turkish (Latin-5)
ISO 8859-10 Lappish/Nordic/Eskimo languages (Latin-6)
ISO 8859-11 Latin/Thai
ISO 8859-13 Baltic Rim languages (Latin-7)
ISO 8859-14 Celtic (Latin-8)
ISO 8859-15 West European languages (Latin-9)
ISO 8859-16 Romanian (Latin-10)
例如,我们可以在ISO 8859-7中找到€符号:
244 164 A4 € EURO SIGN
在16位UTF-16 Unicode范围内递增或递减**: 下面是生成整个unicode字符集的方法,通过生成html实体并转换为utf8.Run it online。
你正在看一个数字表示问题。这是base24(或者你的字母表中有多少数字)。让我们称之为基数b。 给字母表中的每个字母分配一个数字(A=1,B=2,C=3)。 接下来,计算出你输入的“数字”:表示法“ABC”的意思是A*b^2 + B*b^1 + C*b^0使用这个公式来找到数字(int)。递增它。 接下来,将其转换回您的数字系统:除以b^2得到第三位数,余数(模)除以b^1得到第二位数,余数(模)除以`b^0^得到最后一位数。 这可能有助于:How to convert from base10 to any other base .
#region Hexavigesimal (Excel Column Name to Number)
public static int FromHexavigesimal(this string s)
{
int i = 0;
s = s.Reverse();
for (int p = s.Length - 1; p >= 0; p--)
{
char c = s[p];
i += c.toInt() * (int)Math.Pow(26, p);
}
return i;
}
public static string ToHexavigesimal(this int i)
{
StringBuilder s = new StringBuilder();
while (i > 26)
{
int r = i % 26;
if (r == 0)
{
i -= 26;
s.Insert(0, 'Z');
}
else
{
s.Insert(0, r.toChar());
}
i = i / 26;
}
return s.Insert(0, i.toChar()).ToString();
}
public static string Increment(this string s, int offset)
{
return (s.FromHexavigesimal() + offset).ToHexavigesimal();
}
private static char toChar(this int i)
{
return (char)(i + 64);
}
private static int toInt(this char c)
{
return (int)c - 64;
}
#endregion
8条答案
按热度按时间wlp8pajw1#
字符/字符串增量在PHP中可以工作(尽管减量不能)
fnvucqvd2#
你可以用++操作符来实现。
阿坝
然而,这个实现有一些奇怪的事情:
这将打印出从
a
到y
的字母。这将打印出从
a
到z
的字母,并以aa
继续,以yz
结束。pes8fvy93#
如PHP RFC: Strict operators directive(* 目前正在讨论中 *)所述:
当strict_operators启用时,对字符串使用increment函数将抛出TypeError。
不管RFC是否被合并,PHP迟早会加入严格的运算符。因此,你不应该递增字符串。
a-z/A-Z范围
如果你知道你的字母将保持在a-z/A-Z范围内(不超过z/Z),你可以使用将字母转换为ASCII代码的解决方案,递增它,然后转换回字母。
使用
ord()
achr()
:ord()
将字母转换为ASCII数字表示1.递增该数字表示
1.使用
chr()
将数字转换回字母Z
(ASCII 90)开始,它不会转到AA
,而是[
(ASCII 91)。*超越z/Z
如果你还想把
z
变成aa
,这就是我的想法:如果你打算进一步使用它,我也给你100%的覆盖率。它测试原始字符串增量
++
:ni65a41a4#
在7位128个字符的ASCII范围内递增或递减**,最安全的方法是:
因此,通过递减
a
来获得反勾是正常的,因为ascii spec list打印整个ascii范围:
关于ANSI7 bits ASCII的更多信息:
man ascii
在8位扩展的256个字符UTF-8范围内递增或递减。
这就是它在主机字符集方面开始不同的地方。但是这些字符集在现代机器上都是可用的。从php开始,最安全的是使用
php-mbstring
扩展:https://www.php.net/manual/en/function.mb-chr.php扩展ASCII(EASCII或高ASCII)字符编码是8位或更大的编码,包括标准的7位ASCII字符以及其他字符。https://en.wikipedia.org/wiki/Extended_ASCII
更多信息,例如:
man iso_8859-9
例如,我们可以在ISO 8859-7中找到
€
符号:在16位UTF-16 Unicode范围内递增或递减**:
下面是生成整个unicode字符集的方法,通过生成html实体并转换为utf8.Run it online。
同样的东西,但范围上升到
(16^4 * 4)
!使用字符的 * base 10 * 十进制表示来检索the unicode
€
symbol。相同的符号,使用 * base 16 * 十六进制表示:
前32位是为special control characters保留的,输出垃圾,但有意义。
1aaf6o9v5#
你正在看一个数字表示问题。这是base24(或者你的字母表中有多少数字)。让我们称之为基数b。
给字母表中的每个字母分配一个数字(A=1,B=2,C=3)。
接下来,计算出你输入的“数字”:表示法“ABC”的意思是
A*b^2 + B*b^1 + C*b^0
使用这个公式来找到数字(int)。递增它。接下来,将其转换回您的数字系统:除以
b^2
得到第三位数,余数(模)除以b^1
得到第二位数,余数(模)除以`b^0^得到最后一位数。这可能有助于:How to convert from base10 to any other base .
xtupzzrd6#
你可以用ASCII码来表示字母数字,从那里你可以递增和递减来得到上一个/下一个字符。
您可以将字符串拆分为单个字符,然后对这些字符应用转换。
只是一些想法让你开始。
nzk0hqpo7#
wwwo4jvm8#
我在c#中有这些方法,你可以转换为php并修改以满足你的需要,我不确定Hexavigesimal是这些方法的确切名称。
编辑
我看到其他的答案,在PHP中你可以使用
++
代替,很好!