JS計算字串所佔位元組數

2021-09-06 23:41:52 字數 3714 閱讀 2807

最近專案有個需求要用js計算一串字串寫入到localstorage裡所佔的記憶體,眾所周知的,js是使用unicode編碼的。而unicode的實現有n種,其中用的最多的就是utf-8和utf-16。因此本文只對這兩種編碼進行討論。

下面這個定義摘自維基百科(做了部分刪減。

utf-8(8-bit unicode transformation format)是一種針對unicode的可變長度字元編碼,可以表示unicode標準中的任何字元,且其編碼中的第乙個位元組仍與ascii相容,使用一至四個位元組為每個字元編碼

其編碼規則如下:

字元**在000000 – 00007f之間的,用乙個位元組編碼;

000080 – 0007ff之間的字元用兩個位元組;

000800 – 00d7ff 和 00e000 – 00ffff之間的用三個位元組,注: unicode在範圍 d800-dfff 中不存在任何字元;

010000 – 10ffff之間的用4個位元組。

而utf-16 則是定長的字元編碼,大部分字元使用兩個位元組編碼,字元**超出 65535 的使用四個位元組,如下:

000000 – 00ffff 兩個位元組;

010000 – 10ffff 四個位元組。

一開始認為既然頁面用的是utf-8編碼,那麼存入localstorage的字串,應該也是用utf-8編碼的。但後來測試發現,明明計算出的size是不到5mb,存入localstorage卻拋異常了。想了想,頁面的編碼是可以改的。如果localstorage按照頁面的編碼存字串, 不就亂套了?瀏覽器應該都是使用utf-16編碼的。用utf-16編碼計算出5mb的字串,果然順利寫進去了。超過則失敗了。

好了,附上**實現。計算規則就是上面寫的,為了計算速度,把兩個for迴圈分開寫了。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

/**

* 計算字串所佔的記憶體位元組數,預設使用utf-8的編碼方式計算,也可制定為utf-16

* utf-8 是一種可變長度的 unicode 編碼格式,使用一至四個位元組為每個字元編碼

*

* 000000 - 00007f(128個**)      0zzzzzzz(00-7f)                             乙個位元組

* 000080 - 0007ff(1920個**)     110yyyyy(c0-df) 10zzzzzz(80-bf)             兩個位元組

* 000800 - 00d7ff

00e000 - 00ffff(61440個**)    1110***x(e0-ef) 10yyyyyy 10zzzzzz           三個位元組

* 010000 - 10ffff(1048576個**)  11110www(f0-f7) 10****** 10yyyyyy 10zzzzzz  四個位元組

*

* 注: unicode在範圍 d800-dfff 中不存在任何字元

*

*

* utf-16 大部分使用兩個位元組編碼,編碼超出 65535 的使用四個位元組

* 000000 - 00ffff  兩個位元組

* 010000 - 10ffff  四個位元組

*

*

* @param  str

* @param  charset utf-8, utf-16

* @return

*/

varsizeof =function(str, charset)else

}

}elseelseif(charcode <= 0x07ff)elseif(charcode <= 0xffff)else

}

}

returntotal;

}

JS計算字串所佔位元組數

廢話不說,直接正題吧。最近專案有個需求要用js計算一串字串寫入到localstorage裡所佔的記憶體,眾所周知的,js是使用unicode編碼的。而unicode的實現有n種,其中用的最多的就是utf 8和utf 16。因此本文只對這兩種編碼進行討論。下面這個定義摘自維基百科 做了部分刪減。utf...

字元所佔位元組數

不同的字元所佔的位元組是不同的。ascii碼 乙個英文本母 不分大小寫 佔乙個位元組的空間,乙個中文漢字佔兩個位元組的空間。乙個二進位制數字序列,在計算機中作為乙個數字單元,一般為8位二進位制數,換算為十進位制。最小值0,最大值255。如乙個ascii碼就是乙個位元組。utf 8編碼 乙個英文本元等...

計算字串的位元組數

str.charcodeat index 返回字串中字元的unicode編碼 unicode大於255的是兩個位元組 小於等於255的是乙個位元組 unicode 是目前用來解決 ascii 碼 256 個字元限制問題的一種比較流行的解決方案。大家知道,ascii 字符集只有256個字元,用 0 2...