【第一章1.6】字符串与编码

贴主:admin 发贴:2024-07-20 20:24 浏量:56
import console; 
/***********************************************************************************
字符串与编码
计算机中以八个二进制位表示一个八位字节 - 这称为一个单字节字符。
一组连续的字节就构成一个字符串,在aardio中字符串是基于二进制的,可以包含任何数据(例如图像、文本、或者'\0'等不可打印字符)。

字符串本质上是字节构成的数组,但这个数组是只读的,每次对字符串做替换、连接等操作都会生成新的字符串,
每个字符串指向的内存不应该被直接修改。

下面的代码定义了一个最基本的字符串:
var str ="C:\Documents and Settings\admin\Desktop\string.aardio" 

可以用 #str 取该字符串占用的内存字节长度,可以使用下标获取每个字节的数值,
例如 str[1] 取出第一个字节的数值是67, 内存中的67在文本中显示出来的就是字符"C" - 这是ASCII编码规定的。
***********************************************************************************/

var str = "hello word!";
console.log("字符串长度为:",#str);
console.log("第一个字节的ASCII编码值为:",str[1])


/*

不同的编码还存在不同的系统环境不兼容的问题,例如GBK的软件在繁体系统上就会乱码,而Unicode编码可以
避免这一问题,Unicode编码有多种方案,主要被采用的则是UTF-8,UTF-16。 windows系统使用的是UTF-16,
而 aardio 10开始,aardio的源代码文件、字符串等等默认使用UTF-8编码。
 
注意在aardio文档中一般提到Unicode指的是UTF 16.

例如 string.fromUnicode() string.toUnicode() 函数默认都是从UTF-8到 UTF-16(Unicode)双向转换。
*/


/***********************************************************************************
字符串

一、文本字符串
文本字符串放在双引号中,字符串可以包含换行,aardio保证双引号中的字符串换行使用'\n'换行符,不包含'\r'回车符。

如果在双引号中的字符串本身包含双引号,可以用两个连续的双引号表示双引号自身。
另外在 aardio 10中,可以使用反引号(键盘左上角ESC下方的键)代替双引号,它们的作用与用法相同,
、
***********************************************************************************/

var str1 = '我是字符串 \n 我是字符串2';  //单引号 里面 \n 表叔转义 换行
var str2 = `我也是字符串00000`;

console.log(str1);

console.log(str2);


console.log( string.getUtf("你好呀")); //获取字符串utf编码
 
 string.setUtf(
 console.log(str3);
 
 
/***********************************************************************************
二、转义字符串
转义字符串放在单引号中。支持\转义符,语法与C\C++相同。
需要注意的aardio中双引号中的字符串不能使用转义符,这一点与C语言有别。

在单引号中的字符串可以换行书写,但是aardio会忽略所有的换行,
aardio保证单引号中只能以'\r\n'表示回车换行符,所有字面值的回车换行被忽略 。
转义字符串支持的转义符与C,JS等类似:

转义符	说明
\\	表示普通\字符

\ddd	用一到三个数字组成十进制数值表示一个字符 ,
如果只想表示'\0',并且后面有其他不相关的数字,
可以在\0后面加一个换行,例如 str ='\0
86'


\xFF	用x后面的两位十六进制表示一个字符

\uFFFF	用u后面的4位十六进制表示一个Unicode字符,
可使用一对代理字符表示Unicode编码大于0x10000的4字节字符,例如:'\uD86E\uDC1C'
注意普通字符串里默认会解析为UTF-8编码的多字节字符,
而在Unicode字符串中解析为UTF-16编码的字符。


\UFFFFFFFF	\U大写时,
可在其后跟随8、6、4 个十六进制字符表表示一个 Unicode 字符,为避免歧义,应当总是使用 8 个 16 进制字符(不足在前面补 0)。

支持Unicode编码大于 0x10000 的字符。

注意普通字符串里默认会解析为UTF-8编码的多字节字符,例如'\U0002b81c'
而在Unicode字符串中解析为UTF-16编码的字符,例如'\U0002b81c'u。


\a	响铃符(常用于print函数发出警告铃声,例如 io.print('\a')
\b	退格
\f	换页
\e	ESC码。等价于 \x1b
\r	回车
\n	换行
\r\n	回车换行
\t	制表符(横向跳格)
\v	匹配一个垂直制表符。等价于 \x0b
\"	双引号
\'	单引号
\[	方括号[
\]	方括号]
转义字符串可以换行、但是aardio会忽略换行符,必须使用\n表示换行、用\r\n表示回车换行。
如果单引号中仅包含一个字符、并且后面附加#号后缀、则表示该字符的字节码数值。
***********************************************************************************/


/***********************************************************************************
三、包含字符串
包含字符串用于将一个文件直接嵌入aardio代码中,并加载为一个二进制字符串。 例如:
 var str = $"/test/test.jpg"

在aardio程序编译发布以后,该文件就会直接被编译到aardio代码中,不再需要原来的文件也可以运行。

四、注释字符串
在aardio的赋值语句中,可以将行注释、段注释作为一个字符串组成赋值语句。
因为aardio中段注定可以自定义注释标记里 星号数目 - 只要首尾匹配就可以,这就可以方便的用来表示复杂的字符串。
而不用担心所包含的字符串里可能出现字符串的结束标记。

注释字符串的作用与双引号类似,表示的是纯文本字符串,aardio解析后会将起标记为UTF8编码,
但是段注释保证将换行解释为\r\n',并且忽略首尾紧邻星号的第一个空行(如果有的话),而行注释保证字符串没有回车符('\r')或换行符('\n')


请参考:回车换行符

示例:

str = //表示原始单行字符串,到行尾结束;

str = /*
表示原始多行字符串,首尾的*字符可以有一或多个,但*字符的数目必须首尾匹配
*/
***********************************************************************************/


console.pause(true);


相关回复


    暂无评论!

发表回复