ucs2.js 981 B

12345678910111213141516171819202122232425262728293031323334353637
  1. var chunk = require('./chunk');
  2. var map = require('./map');
  3. exports = {
  4. encode: function(arr) {
  5. if (arr.length < 32768) {
  6. return String.fromCodePoint.apply(String, arr);
  7. }
  8. return map(chunk(arr, 32767), function(nums) {
  9. return String.fromCodePoint.apply(String, nums);
  10. }).join('');
  11. },
  12. decode: function(str) {
  13. var ret = [];
  14. var i = 0;
  15. var len = str.length;
  16. while (i < len) {
  17. var c = str.charCodeAt(i++);
  18. if (c >= 0xd800 && c <= 0xdbff && i < len) {
  19. var tail = str.charCodeAt(i++);
  20. if ((tail & 0xfc00) === 0xdc00) {
  21. ret.push(((c & 0x3ff) << 10) + (tail & 0x3ff) + 0x10000);
  22. } else {
  23. ret.push(c);
  24. i--;
  25. }
  26. } else {
  27. ret.push(c);
  28. }
  29. }
  30. return ret;
  31. }
  32. };
  33. module.exports = exports;