字符串和字符

字符串的性质
Wolfram 语言大部分是有结构的表达式,但它也可以用来作为 Wolfram 语言无结构的文本处理系统.
"text"
包含任意文本的字符串
文本字符串.
在 Wolfram 语言中输入的字符串要放在引号之中,但 Wolfram 语言输出字符串时没有引号.
可以通过字符串的形式来显示引号. 在 Wolfram 语言的笔记本中,引号在编辑字符串时自动出现.
当 Wolfram 语言输出一个字符串时,一般没有引号:
通过输入形式的调用可以显示引号:
Wolfram 语言输出字符串时一般没有引号可以使我们用字符串去代表不同的输出内容.
The strings are printed out here without explicit quotes:
应该理解字符串 "x" 在输出时为 x,但它与符号 x 完全不同.
字符 "x" 与符号 x 不同:
可以通过头部测试一个表达式是不是字符. 字符串的头部总是 String.
所有字符串的头部为 String
模式 _String 与任何字符匹配:
字符串可以和其他表达式一样作为模式或变换的项. 但不能直接对字符串赋值.
给出涉及字符串的表达式的定义:
用符号 x 代替所有出现的 "aa" 字符串:
字符串的运算
Wolfram 语言提供了各种字符串运算函数,这些函数的大部分基本出发点是将字符串当作一个字符序列,许多函数都与列表的运算类似.
s1<>s2<>
StringJoin[{s1,s2,}]
将几个字符串连接在一起
StringLength[s]
给出一个串中的字符数
StringReverse[s]
颠倒串中字符的顺序
完全字符串的运算.
<> 可以将任意数目的字符串相连接:
StringLength 给出串中的字符数:
StringReverse 颠倒串中的字符:
StringTake[s,n]
s 的前 n 个字符形成字符串
StringTake[s,{n}]
取出 s 中的第 n 个字符
StringTake[s,{n1,n2}]
取出 n1n2 的字符
StringDrop[s,n]
s 中用截掉前 n 个字符的方式得到字符串
StringDrop[s,{n1,n2}]
截掉从 n1n2 的字符
取出或截掉子串.
字符串处理中的 StringTakeStringDrop 与集合运算中的 TakeDrop 类似. 与 TakeDrop 相似,它们用 Wolfram 语言标准的排序方式,例如,当n为负数时是从字符串的最后开始计数. 注意,字符串中的第一个字符的位置是 1.
这是一个简单的字符串:
alpha 中取出前 5 个字符:
alpha 中的第 5 个字符:
去掉倒数第 2 至倒数第 10 个字符:
StringInsert[s,snew,n]
将字符串 snew 插在 s 中的第 n 个位置
StringInsert[s,snew,{n1,n2,}]
将字符串 snew 多次插入 s
在一个字符串中的插入.
StringInsert[s,snew,n] 产生第 n 个字符是 snew 的第一个字符的字符串.
产生一个新字符串,它的第4个位置是 "XX" 的第一个字符:
负位置是从字符串的后面计数:
"XXX" 被重复插入原字符串的指定位置:
使用 Riffle 在列表中的词间加入空格:
StringReplacePart[s,snew,{m,n}]
用字符串 snew 替换 s 中从 mn 的字符
StringReplacePart[s,snew,{{m1,n1},{m2,n2},}]
snew 多次在 s 中进行替换
StringReplacePart[s,{snew1,snew2,},{{m1,n1},{m2,n2},}]
用对应的 snewi 替换 s 中的子串
Replacing parts of a string.
"XXX" 替换从 2 到 6 的字符:
用字符串 "XXX" 进行了两次替换:
用不同的字符串进行了两次替换:
StringPosition[s,sub]
给出 s 中子串 sub 出现的起始和结束位置的列表
StringPosition[s,sub,k]
仅给出 ssubk 次出现的位置列表
StringPosition[s,{sub1,sub2,}]
给出 subi 中任一个出现的位置
找出子字符串的位置.
StringPosition 能给出一个字符串中一个子串出现的位置. StringPosition 的返回值是一个列表,列表中的每一个元素对应于子串的一次出现,它指出了子串的起始和结束位置. 这些列表的形式与 StringTakeStringDropStringReplacePart 中的形式一致.
以下给出子串 "abc" 出现位置的列表:
以下仅给出第一个 "abc" 出现的位置:
以下给出了字符串 "abc""cd" 出现的位置. 默认地,它们在位置上有重叠:
以下没有包括重叠:
StringCount[s,sub]
计算在 ssub 的出现次数
StringCount[s,{sub1,sub2,}]
计算任意 subi 出现的次数
StringFreeQ[s,sub]
检测 s 是否不包括 sub
StringFreeQ[s,{sub1,sub2,}]
检测 s 是否不包括所有 subi
StringContainsQ[s,sub]
test whether s contains sub
StringContainsQ[s,{sub1,sub2,}]
test whether s contains any of the subi
StringStartsQ[s,sub]
test whether s starts with sub
StringStartsQ[s,{sub1,sub2,}]
test whether s starts with any of the subi
StringEndsQ[s,sub]
test whether s ends with sub
StringEndsQ[s,{sub1,sub2,}]
test whether s ends with any of the subi
子串的检测.
以下计算任一子串的出现次数,默认地,不包括重叠:
StringReplace[s,sb->sbnew]
s 中用 sbnew 替换 sb
StringReplace[s,{sb1->sbnew1,sb2->sbnew2,}]
用对应的 sbnewi 替换 sbi
StringReplace[s,rules,n]
进行至多 n 次替换
StringReplaceList[s,rules]
给出使用每个单一替换所得到的字符串列表
StringReplaceList[s,rules,n]
给出至多 n 结果
根据规则替换子串.
用字符串 XX 替换所有的 a
Y 替换 abc,用 XXX 替换 d
第一个 cde 没有被替换,因为它与 abc 重复:
StringReplace 可以对一个字符串从左到右扫描进行可能的替换,并返回得到的新字符串. 然而,有时候,查看所有可能的单一替换的结果是有用的. 用户可以使用 StringReplaceList 获得所有结果的列表.
以下给出替换每个 a 得到的结果列表:
以下显示了所有可能的单一替换的结果:
StringSplit[s]
s 根据空格符分界分成子串组
StringSplit[s,del]
在分界符 del 的位置上分组
StringSplit[s,{del1,del2,}]
在任意 deli 的位置上分组
StringSplit[s,del,n]
分成至多 n 个子串组
字符串分组.
在每个空格处对字符串进行分组:
在每个 "::" 位置上分组:
在每个冒号或空格位置上分组:
StringSplit[s,del->rhs]
在每个分解符位置上插入 rhs
StringSplit[s,{del1->rhs1,del2->rhs2,}]
在对应的 deli 位置上插入 rhsi
替换分界符来对字符串进行分组.
在每个 :: 分界符位置上插入 {x,y}
Sort[{s1,s2,s3,}]
对字符串列表排序
Sorting strings.
Sort 根据标准字典顺序对字符串进行排序:
StringTrim[s]
s 的开头和结尾删除空格
StringTrim[s,patt]
从开头和结尾删除与 patt 匹配的子串
从每个字符串的末尾删除空格:
SequenceAlignment[s1,s2]
寻找 s1s2 的最优对齐法
寻找两个字符串的最优对齐法:
字符串中的字符
Characters["string"]
将字符串转换为一个字符列表
StringJoin[{"c1","c2",}]
将一个字符集合转换为一个字符串
字符串与字符集合的转换.
以下给出字符串中的字符:
对这一字符列表可以进行标准的列表操作:
StringJoin 将给定的字符列表转换为字符串:
DigitQ[string]
测试串中的所有字符是否是数字
LetterQ[string]
测试串中的所有字符是否是字母
UpperCaseQ[string]
测试串中的所有字符是否是大写字母
LowerCaseQ[string]
测试串中的所有字符是否是小写字母
测试字符串中的字符.
串中的所有字符是字母:
串中的有些字符不是大写,所有测试结果为 False
ToUpperCase[string]
产生一个所有字母都是大写的字符串
ToLowerCase[string]
产生一个所有字母都是小写的字符串
大小写之间的转换.
将所有的字母换成大写:
CharacterRange["c1","c2"]
产生一个从 c1c2 的字符列表
给出字符的范围.
产生一个小写字母顺序排列的集合:
以下给出了一个大写字母的列表:
以下给出了一些数字:
CharacterRange 对任何自然顺序的字符范围将给出有意义的结果,CharacterRange 利用 Wolfram 语言内部指定的字符代码进行处理.
以下显示了 Wolfram 语言代码所定义的字符顺序:
字符串模式
字符串操作函数如 StringReplace 的一个重要特征是它们不仅能够处理由字母组成的字符串,也能处理由字符串集合组成的模式.
以下使用 X 替代 b 或者 c
以下使用 u 替代任何字符:
可以使用包含与 Wolfram 语言符号模式对象相混合的普通字符串的字符串表达式 来指明字符串模式.
s1~~s2~~
StringExpression[s1,s2,]
由字符串和模式对象组成的序列
字符串表达式.
以下表示后面带有任意单个字符的字符串 ab 的字符串表达式:
以下对字符串模式的每次出现进行替换:
StringMatchQ["s",patt]
测试 "s" 是否与 patt 匹配
StringFreeQ["s",patt]
测试 "s" 是否不含有与 patt 匹配的子串
StringContainsQ["s",patt]
测试 "s" 是否包含与 patt 匹配的子字符串
StringStartsQ["s",patt]
测试 "s" 是否以与 patt 匹配的子字符串开头
StringEndsQ["s",patt]
测试 "s" 是否以与 patt 匹配的子字符串结尾
StringCases["s",patt]
给出与 patt 匹配的子串 "s" 的列表
StringCases["s",lhs->rhs]
rhs 替换每个 lhs
StringPosition["s",patt]
给出与 patt 匹配的子串的位置列表
StringCount["s",patt]
计算有多少子串与 patt 匹配
StringReplace["s",lhs->rhs]
替换与 lhs 匹配的每个子串
StringReplaceList["s",lhs->rhs]
给出所有替换 lhs 的方法列表
StringSplit["s",patt]
在每个与 patt 匹配的子串处分解 s
StringSplit["s",lhs->rhs]
lhs 处分解,并在该位置插入 rhs
支持字符串模式的函数.
以下给出在字符串中出现的模式的所有可能性:
以下给出在字符串 "ab" 后出现的每个字符:
以下给出字符串中所有相同字符组成的对:
可以在字符串模式中使用所有标准 Wolfram 语言模式对象. _ 总是表示单个字符. __ 表示一个或多个字符组成的序列.
_ 表示任意单个字符:
__ 表示一个或多个字符组成的任意序列:
___ 表示零个或多个字符组成的任意序列:
"string"
由字符组成的字符串
_
任意单个字符
__
由一个或多个字符组成的任意序列
___
由 0 个或多个字符组成的任意序列
x_
,
x__
,
x___
名称有 x 的子串
x:pattern
名称为 x 的模式
pattern..
重复 1 次或多次的模式
pattern...
重复 0 次或多次的模式
{patt1,patt2,}
patt1|patt2|
与至少一个 patti 匹配的模式
patt/;cond
cond 等于 True 的模式
pattern?test
对每个字符 test 等于 True 的模式
Whitespace
空格字符组成的序列
NumberString
数字字符串
charobj
表示字符类的对象(参见下面的讨论)
RegularExpression["regexp"]
与规则表达式匹配的子串
在字符串模式中的对象.
在冒号或分号处分解:
只包含 ab 的子序列:
在字符串模式中另外的方法可以由列表形式给出:
可以使用标准 Wolfram 语言结构,如 Characters["c1c2"]CharacterRange["c1","c2"] 来产生在字符串模式中应用的其他字符列表.
以下给出字符列表:
以下替换元音字符:
以下在 "A""H" 的范围内给出字符:
除了允许明确的字符列表,Wolfram 语言还提供了字符串模式中可能字符的一些通用类的符号规定.
{"c1","c2",}
任意 "ci"
Characters["c1c2"]
任意 "ci"
CharacterRange["c1","c2"]
"c1""c2" 范围内的任意字符
DigitCharacter
数字 09
LetterCharacter
字母
WhitespaceCharacter
空白、换行、tab或其他空格字符
WordCharacter
字母或数字
Except[p]
除了与 p 匹配的任意字符
字符类的规定.
以下在一个字符串中选出数字字符:
以下选出除了数字以外的所有字符:
以下选出所有一个或多个数字组成的子序列:
所得结果是字符串:
以下把字符串转换为数字:
字符串模式经常用作从文本数据的字符串中提取结构的方法. 通常通过使用与所对应结构的不同部分匹配的字符串模式的不同部分来实现.
以下选出每个后面带有一个数字的 =
以下给出单个的数字:
以下从字符串中提取变量数值
ToExpression 把它们转换为普通的符号和数字:
在许多情况下,文本数据可能包含空白、换行或 tab 这些可以被认作空格可以忽略的序列. 在 Wolfram 语言中,符号Whitespace 表示任何这种类型的序列.
从字符串中删除所有空格:
使用单个逗号替换所有空格序列:
字符串模式通常应用于一个给定字符串中任何位置出现的子串. 然而,有时,指定只能用于特定位置子串的模式是方便的. 这可以通过在字符串模式中包含符号如 StartOfString 来实现.
StartOfString
整个字符串的开头
EndOfString
整个字符串的末尾
StartOfLine
行的开头
EndOfLine
行的末尾
WordBoundary
在词字符和其他之间的分界
Except[StartOfString]
, etc.
除了特定位置如 StartOfString 等的其他任何位置
表示字符串中特定位置的结构.
以下在一个字符串中替换所有出现的 "a"
以下仅当 "a" 在一个字符串开头处时替换它:
以下替换所有出现的子串 "the"
以下只替换在两边都具有词边界的子串:
字符串模式只允许同种 /; 和作为普通 Wolfram 语言模式的其他条件.
以下给出字符串中不等连续字符的情况:
当在一个字符串模式中给出一个对象,如 x__e..,Wolfram 语言自动假设用户想要它匹配最长可能字符序列. 然而,有时,用户可能想要匹配的是最短可能字符序列. 这可以使用 Shortest[p] 指明.
Longest[p]
p 的最长一致匹配(默认)
Shortest[p]
p 的最短一致匹配
表示最长和最短匹配的对象.
默认情况下,字符串模式与最长可能字符序列匹配:
Shortest 指明用户要寻找的是最短可能匹配:
Wolfram 语言默认情况下认为字符 "X""x" 是不同的. 但是通过在字符串操作中设置选项IgnoreCase->True,可以让 Wolfram 语言同等对待大小写字母.
IgnoreCase->True
同等对待大小写字母
指定与大小写无关的字符串操作.
以下替换所有出现的 "the",与大小写无关:
在一些字符串操作中,用户可能要指明是否包含子串之间的重叠. 默认情况下,StringCasesStringCount 不包含重叠,但是 StringPosition 包含重叠.
以下选出连续字符的对,默认情况下忽略重叠:
以下包含重叠:
StringPosition 默认情况下包含重叠:
Overlaps->All
包含所有重叠
Overlaps->True
包含在每个位置开始的至多一个重叠
Overlaps->False
不包含所有重叠
处理字符串中重叠的选项.
以下只产生单个匹配:
以下产生连续的重叠匹配:
以下包含所有可能的重叠匹配:
规则表达式
Wolfram 语言的一般模式提供了进行字符串操作的强大方法. 但是如果对专门的字符串操作语言熟悉的话,有时可能会发现使用规则表达式 记号指明字符串模式是方便的. 在 Wolfram 语言中可以使用 RegularExpression 对象实现.
RegularExpression["regex"]
"regex" 指定的规则表达式
在 Wolfram 语言中使用规则表达式记号.
以下取代所有出现的 ab
以下使用 Wolfram 语言的一般字符串模式指明同样的操作:
可以把规则表达式与一般模式混合使用:
RegularExpression 在 Wolfram 语言中支持所有标准规则表达式结构.
c
字母字符 c
.
除了新的一行以外的任何字符
[c1c2]
任何 ci 字符
[c1-c2]
c1c2 范围内的任何字符
[^c1c2]
除了 ci 的任何字符
p*
重复0次或多次的 p
p+
重复1次或多次的 p
p?
出现0次或1次的 p
p{m,n}
重复 mn 次之间的 p
p*?
,
p+?
,
p??
最短的符合匹配条件的一致字符串
(p1p2)
与序列 p1p2 匹配的字符串
p1|p2
p1p2 匹配的字符串
在 Wolfram 语言规则表达式中的基本结构.
以下寻找与特定规则表达式匹配的子串:
以下使用 Wolfram 语言一般字符串模式做同样的操作:
在许多规则表达式结构和基本的 Wolfram 语言一般字符串模式结构之间存在紧密的对应关系.
._
(严格上,
Except["n"]
)
[c1c2]Characters["c1c2"]
[c1-c2]CharacterRange["c1","c2"]
[^c1c2]Except[Characters["c1c2"]]
p*p...
p+p..
p?p|""
p*?
,
p+?
,
p??
Shortest[p],
(p1p2)(p1~~p2~~)
p1|p2p1|p2
在规则表达式和一般字符串模式结构之间的对应关系.
正如在 Wolfram 语言一般字符串模式中一样,在规则表达式中也有对不同的通用字符类的特殊记号. 注意,用户需要使用 符号来在 Wolfram 语言规则表达式字符串中输入大多数记号.
\\d
数字 09(DigitCharacter
\\D
非数字(Except[DigitCharacter]
\\s
空格、换行、tab 或其他空格字符(WhitespaceCharacter
\\S
非空格字符(Except[WhitespaceCharacter]
\\w
词字符(字母、数字或 _)(WordCharacter
\\W
非词字符(Except[WordCharacter]
[[:class:]]
位于命名类中的字符
[^[:class:]]
不位于命名类中的字符
字符类的规则表达式记号.
以下给出带有数字字符的每个 a 的子串:
以下使用 Wolfram 语言的一般字符串模式做同样的事情:
Wolfram 语言支持标准 POSIX 字符类 alnumalphaasciiblankcntrldigitgraphlowerprintpunctspaceupperwordxdigit.
以下寻找子序列中的大写字母:
以下做同样的事情:
^
字符串的开头 (StartOfString
$
字符串的末尾 (EndOfString
\\b
词边界(WordBoundary
\\B
除了词边界的任何位置 (Except[WordBoundary]
字符串中位置的规则表达式记号.
在一般的 Wolfram 语言模式中,可以使用例如 x_x:patt 等结构来对匹配的对象给出任意的名字. 在规则表达式中,可以使用如下方法处理序列号:在一个规则表达式中第 n 个带括号的模式对象 (p) 在模式内为 \\n,而在模式外为$n.
以下寻找所出现的相同字母对:
现在使用 Wolfram 语言的一般字符串模式做同样的事情:
以下 $1 指的是与 (.) 匹配的字母:
这是 Wolfram 语言模式版本:
字符串中的特殊字符
除了标准键盘上的字符外,Wolfram 语言的字符串中还可以包含 Wolfram 语言所支持的一些特殊字符.
以下是含有特殊字符的字符串:
可与其他字符串一样对该字符串进行操作:
以下字符串中字符的列表:
在 Wolfram 语言的笔记本中,像 等特殊字符直接显示. 但是在用文本界面时,容易显示的字符就是在键盘上所出现的字符. 显示哪些特殊字符从 $CharacterEncoding 的值推断出来.
于是,Wolfram 系统在这种情况下就用与特殊字符相接近的字符,当无法实现时,Wolfram 系统就给出这些特殊字符的全名.
Wolfram 语言笔记本中用 StandardForm,特殊字符可以直接显示:
OutputForm 中,特殊字符在可能时就用相近的一般字符代替:
InputForm 或者 FullForm 中,无法估计特殊字符. Wolfram 语言对于 InputForm 格式下的可表示的特殊字符使用全名,而 FullForm 总使用长名,甚至用于笔记本界面.
InputForm 中,所有字符不是编码的一部分,在这种情况下,除了 é 的特殊字符使用长名写出:
FullForm 中,所有特殊字符使用长名写出:
默认情况下,当保存笔记本和程序包时,Wolfram 系统使用字符编码 "PrintableASCII". 这意味着当特殊字符写入文件或者外部程序时,它们完全表示为普通字符组成的序列. 这种统一的表示法在允许 Wolfram 语言中特殊字符用不依赖于特定计算机系统细节的使用方法是重要的.
当创建程序包和笔记本,特殊字符串总是使用全名写出:
使用 "PrintableASCII" 创建没有特殊字符的字符串:
InputForm 中,当使用 "PrintableASCII" 时,完全写出所有特殊字符:
a
一个字符
\[Name]
使用全名的字符
\"
" 将被包含在字符串中
\\
\ 将被包含在字符串中
在字符串中输入字符的方式.
如果字符串中有 "\,必须在它们之前使用 \
\\ 按原样产生一个 \,而不是特殊字符 α 的组成部分:
将字符串分解成字符列表:
以下给出了 α 全名的字符列表:
以下产生了一个实际包含 α 的字符串:
字符串中的换行和 Tab
n
在字符串中包含新的一行
t
一个 tab 包含在字符串中
换行和 tab 的明确表示.
以下显示两行:
InputForm 中,有一个 n 来表示新的一行:
Wolfram 语言在一个字符串中保留输入的换行:
该字符串中,有一个新的换行:
在一行的末尾使用单个 \,Wolfram 语言将忽略换行:
应该认识到,虽然有可能通过原来的 tab 和换行获得 Wolfram 语言输出的一些格式,但这基本上在很少情况下是个好办法. 通常,一个更好的办法是使用高级的 Wolfram 语言原始格式,可参见 "面向字符串的输出格式""数字的输出格式",和 "表与矩阵". 这些原始格式将总是产生一致的输出,不论在一个特定的设备中tab设置的位置.
在包含换行符的字符串中,文本总是左对齐:
前端格式结构 Column 给出了更多的控制. 以下文本是右对齐:
以下文本居中:
字符代码
ToCharacterCode["string"]
给出一个字符串中字符代码的列表
FromCharacterCode[n]
由代码产生字符
FromCharacterCode[{n1,n2,}]
由一个字符代码列表产生一个字符串
字符与代码的转换.
Wolfram 语言对字符串中的每个字符指定唯一的代码. 该代码在内部被用来代表这个字符.
给出字符串中字符的代码:
FromCharacterCode 给出原来的字符串:
特殊字符也有代码:
CharacterRange["c1","c2"]
用相连的字符代码产生一个字符集合
产生字符序列.
以下给出部分英文字母:
以下是希腊字母:
Wolfram 语言给特殊字符指定了形如 [Alpha] 的名称. 这就可以通过这些字符的名称调用它们,而不需要知道它们的代码.
通过特殊字符的代码产生的字符串:
可以用这些字符的名称来调用它们,而不需要知道它们的代码:
对常用的数学符号和标准的欧洲语言中的符号,Wolfram 语言都为它们给出了名称. 但是对于日文、中文和韩文,它们有上千个其他字符,Wolfram 语言并没有对它们的每个字符分配明确的名称,但是用标准化的字符代码来引用这些字符.
以下是包含日文字符的字符串:
FullForm 中,这些字符用标准字符代码表示. 这些字符代码是十六进制数字:
Wolfram 系统中的笔记本前端已经设置好,当你输入一个字符后,Wolfram 系统将自动找出这个字符的字符代码.
但是,有时用代码直接输入字符是更加方便.
.nn
具有十六进制代码 nn 的字符
\:nnnn
具有十六进制代码 nnnn 的字符
\|nnnnnn
具有十六进制代码 nnnnnn 的字符
用字符代码直接输入字符的方式.
对于代码在 256 之内的字符,可以用 \.nn 输入. 对于代码在 256 之上的字符,必须用 \:nnnn\|nnnnnn 输入. 注意,在任何情况下必须给出确定位数的八进制或十六进制字符,必要时在前面添0.
以下给出几个字符的十六进制代码:
以下用代码输入字符. 注意, 的代码的前一位加个 0:
在给字符指定代码时,Wolfram 语言遵循了与三个标准兼容的原则:ASCII、ISO Latin1 和 Unicode. ASCII 覆盖了所有美式英语键盘上出现的字符. ISO Latin1 覆盖了在许多欧洲语言中出现的字符. Unicode 是一个更一般的标准,它为世界上语言和记号中使用的几万种字符定义了代码.
0127 (.00.7f)
ASCII 字符
131 (.01.1f)
ASCII 控制字符
32126 (.20.7e)
可显示的 ASCII 字符
97122 (.61.7a)
小写英语字母
129255 (.81.ff)
ISO Latin1 字符
192255 (.c0.ff)
在欧洲语言中出现的字母
059391 (:0000:e7ff)
Unicode 标准共用字符
9131009 (:0391:03f1)
希腊字母
1228835839 (:3000:8bff)
中文、日文和韩文字符
84508504 (:2102:2138)
修改后在数学记号中使用的字母
85928677 (:2190:21e5)
箭头
87048945 (:2200:22f1)
数学符号及运算
6144063487 (:f000:f7ff)
由 Wolfram 语言特殊定义的 Unicode 专用字符
Wolfram 语言中使用的部分字符代码的范围.
以下给出了所有可显示的 ASCII 字符:
以下是 ISO Latin1 字母:
以下是在数学记号中使用的一些特殊字符. 其中,空框符表示在当前字形中还没有的字符:
以下几个中文/日文/韩文范围的字符:
字符的原始代码
在 Wolfram 语言中可以用 [Alpha] 等名称或 :03b1 等十六进制编码来指代特殊字符. 当 Wolfram 语言输出一个文件时,其默认方式就是使用这些名称或代码.
但有时对一些特殊字符使用原始码很方便,这意味着不使用特殊字符的名称或十六进制编码,而用与计算机系统或字形相应的原始模式去表示这些特殊字符.
$CharacterEncoding=None
对所有特殊字符使用可显示的 ASCII 名称
$CharacterEncoding="name"
使用由 name 指定的字符的原始代码
$SystemCharacterEncoding
特定计算机系统的默认原始字符代码
设置字符的原始码.
当按下一个键或组合键时,计算机的操作系统就将一定位数的模式输送给 Wolfram 语言. 这个模式在 Wolfram 语言中怎样翻译为一个字符将依赖于所设置的字符编码.
Wolfram 语言的笔记本前端对所使用的字形将自动设置合适的字符编码. 但在文本界面或通过文件等途径使用 Wolfram 语言时,就需要明确地设置 $CharacterEncoding.
通过对 $CharacterEncoding 指定一个合适的值,就能使 Wolfram 语言处理不同编辑器或操作系统所产生的原始文本.
然而应该意识到,Wolfram 语言中所使用的特殊字符的标准表示形式可以用于不同的计算机系统. 但涉及到原始字符编码的表示式却不能.
"PrintableASCII"
仅限于可显示的 ASCII 字符(默认)
"ASCII"
包括控制字符的所有 ASCII 字符
"ISOLatin1"
常用的西欧语言字符
"ISOLatin2"
中欧及东欧语言字符
"ISOLatin3"
另外的欧洲语言字符(如卡泰兰、土尔其)
"ISOLatin4"
其余的欧洲语言字符(如艾托尼亚、南普斯)
"ISOLatinCyrillic"
英语及苏黎士语言字符
"AdobeStandard"
Adobe 标准邮电码
"MacintoshRoman"
Macintosh 罗马字符编码
"WindowsANSI"
Windows 标准字形码
"Symbol"
符号字形编码
"ZapfDingbats"
Zapf dingbats 字形编码
"ShiftJIS"
日语 shiftJIS(8 位与 16 位混用)
"EUC"
扩展的 Unix 日语编码(8 位与 16 位混用)
"UTF8"
Unicode 转换格式编码
Wolfram 语言所支持的一些原始字符编码.
Mathematica 知道适应于不同计算机系统和不同语言的各种原始字符编码. 当指定了一种编码后,Wolfram 语言就可以以原始形式给出包含在这个原始编码中任何字符的编码. 但没有包含在这个编码中的字符仍按标准的 Wolfram 语言全名或十六进制编码给出.
当写入或读入文本文件时,Wolfram 语言内核可以使用您所指定的任何字符编码. 默认情况下,PutPutAppend 对 Wolfram 语言语言文件从一个系统到另一个的可移植性产生 ASCII 表示法.
给文件 tmp 中写入一个字符串:
特殊字符默认地用全名或十六进制数字表示:
Wolfram 语言支持八进制和十六进制原始字符编码. 在 "ISOLatin1" 编码中,所有字符由包含八进制的模式表示,而在 "ShiftJIS" 等编码中,一些字符就涉及到十六进制的编码.
大部分 Wolfram 语言支持的字符编码都将基本的 ASCII 作为一个子集. 这就可以在这些编码中按照一般方式给出Wolfram 语言的常用输入,可以用 [: 序列指代特殊字符.
还有一些原始字符编码没有将基本的 ASCII 作为一个子集. 例如,"Symbol" 编码,在这种编码中,ab 的常用编码用来代表 .
以下给出了一些英文字母的 ASCII 字符码:
"Symbol" 编码中,这些字符码被用来代表希腊字母:
ToCharacterCode["string"]
用标准 Wolfram 语言编码产生字符码
ToCharacterCode["string","encoding"]
用指定的编码产生字符码
FromCharacterCode[{n1,n2,}]
从 Wolfram 语言的标准代码产生字符
FromCharacterCode[{n1,n2,},"encoding"]
用指定的编码产生字符
不同编码中字符码的处理.
以下给出 Wolfram 语言指定给字符的代码:
以下对同样的字符用 Macintosh 罗马编码指定的代码:
以下用 Windows 的标准编码给出了字符的代码,在这种编码中,[Pi] 没有代码:
Wolfram 语言内部使用的字符代码基于 Unicode. 但是,作为默认状态,Wolfram 语言外部总使用 [Name]:nnnn 等简单的ASCII序列去代表特殊字符. 通过让 Wolfram 语言使用原始 "Unicode" 字符编码,就可以使 Wolfram 语言用十六进制 Unicode 形式去读写字符.