JavaScript UTF-16

Các chuỗi Javascript hoạt động tuyệt vời để giữ văn bản bằng tiếng Anh và các ngôn ngữ dựa trên tiếng Latinh khác, nhưng chúng không phù hợp khi nói đến các ngôn ngữ trong mặt phẳng trung gian của Unicode

Hãy xem xét mã Javascript này. Số

import { UtfString } from "utfstring";

var safeString = new UtfString["𤔣"];
console.log[safeString.length]; // 1
3 chứa những gì?

var str = '𤔣';
var len = str.length;

Nếu bạn nói

import { UtfString } from "utfstring";

var safeString = new UtfString["𤔣"];
console.log[safeString.length]; // 1
4, rõ ràng bạn là một người theo chủ nghĩa lý tưởng đầy hy vọng. Trên thực tế,
import { UtfString } from "utfstring";

var safeString = new UtfString["𤔣"];
console.log[safeString.length]; // 1
3 chứa
import { UtfString } from "utfstring";

var safeString = new UtfString["𤔣"];
console.log[safeString.length]; // 1
6. Để giải thích tại sao lại như vậy, chúng ta cần hiểu một số điều về chuẩn Unicode

Một số lịch sử

Unicode không quá phức tạp. Nó chỉ là một dãy số khổng lồ, được gọi là "điểm mã", một điểm cho mỗi ký tự logic. Unicode bao gồm các bộ ký tự cho các ngôn ngữ chữ tượng hình như tiếng Trung Quốc, gần 1.800 biểu tượng cảm xúc và các ký tự cho các chữ viết như Cherokee, Amharic, Hy Lạp và Gruzia [chỉ nêu tên một số]. Có hàng trăm nghìn ký tự được chỉ định trong tiêu chuẩn Unicode

mã hóa

Mã hóa là quá trình chuyển đổi các điểm mã Unicode thành dữ liệu nhị phân có thể được ghi hoặc truyền bởi hệ thống máy tính. Các chuỗi Javascript được mã hóa bằng UTF-16, nghĩa là mỗi ký tự chiếm 16 bit hoặc 2 byte [có 8 bit trên mỗi byte]. Vấn đề là không phải mọi ký tự Unicode đều có thể được mã hóa thành 2 byte, vì 216 chỉ là 65536 - gần như không đủ không gian để biểu thị từng ký tự trong số hàng trăm nghìn ký tự Unicode

Giải pháp của Javascript

Để giảm thiểu vấn đề này, Javascript [cũng như các ngôn ngữ và nền tảng khác sử dụng mã hóa UTF-16] sử dụng cái được gọi là "cặp thay thế. " Các cặp thay thế là hai ký tự được mã hóa đại diện cho một ký tự lô-gic duy nhất. Cùng nhau, chúng rộng 4 byte và có thể đại diện cho mọi ký tự Unicode [232 = 4,294,967,296]

Thật không may, đó là nơi tin tốt kết thúc. Javascript vẫn tính mỗi nhóm gồm hai byte là một ký tự, nghĩa là bất kỳ ký tự nào được tạo thành từ một cặp thay thế trông giống như hai ký tự logic đối với Javascript thay vì chỉ một. Đó là lý do tại sao

import { UtfString } from "utfstring";

var safeString = new UtfString["𤔣"];
console.log[safeString.length]; // 1
3 chứa
import { UtfString } from "utfstring";

var safeString = new UtfString["𤔣"];
console.log[safeString.length]; // 1
6 trong ví dụ trên

Javascript không có khả năng đếm chính xác các cặp thay thế có nghĩa là một loạt các hoạt động chuỗi của nó không an toàn để thực hiện trên các ký tự nước ngoài. Điều này bao gồm các mục yêu thích như

import { UtfString } from "utfstring";

var safeString = new UtfString["𤔣"];
console.log[safeString.length]; // 1
0,
import { UtfString } from "utfstring";

var safeString = new UtfString["𤔣"];
console.log[safeString.length]; // 1
1 và
import { UtfString } from "utfstring";

var safeString = new UtfString["𤔣"];
console.log[safeString.length]; // 1
2

Thư viện này chứa một số thao tác chuỗi an toàn với UTF, bao gồm cả những thao tác tôi vừa đề cập. Các hoạt động này tôn trọng các cặp thay thế để đảm bảo bạn không mất cảnh giác

Cài đặt

UtfString được thiết kế để sử dụng trong nút. js hoặc trong trình duyệt

trong nút

import { UtfString } from "utfstring";

var safeString = new UtfString["𤔣"];
console.log[safeString.length]; // 1

Trong trình duyệt,

import { UtfString } from "utfstring";

var safeString = new UtfString["𤔣"];
console.log[safeString.length]; // 1
3 sẽ khả dụng trên
import { UtfString } from "utfstring";

var safeString = new UtfString["𤔣"];
console.log[safeString.length]; // 1
4 sau khi bạn nhập tệp Javascript từ thư mục
import { UtfString } from "utfstring";

var safeString = new UtfString["𤔣"];
console.log[safeString.length]; // 1
5

________số 8

Cách sử dụng

Các phương thức đối tượng UtfString

UtfString là một lớp mà bạn có thể sử dụng để tạo các đối tượng chuỗi an toàn với UTF. Các đối tượng này hiện đang hỗ trợ các hoạt động sau

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    6 - Tạo đối tượng chuỗi an toàn UTF mới

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    7 - Người lập chỉ mục. trả về ký tự tại chỉ mục đã cho từ chuỗi

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    8 - Cho phép bạn lặp lại các ký tự của chuỗi bằng vòng lặp
    import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    9

  • 
    
        var safeString = new UtfString["𤔣"];
        console.log[safeString.length]; // 1
    
    0 - ​​Tương tự như sử dụng bộ chỉ mục

  • 
    
        var safeString = new UtfString["𤔣"];
        console.log[safeString.length]; // 1
    
    1 - Trả về điểm mã Unicode tại chỉ mục đã cho

  • 
    
        var safeString = new UtfString["𤔣"];
        console.log[safeString.length]; // 1
    
    2 - Giống như
    
    
        var safeString = new UtfString["𤔣"];
        console.log[safeString.length]; // 1
    
    3

  • 
    
        var safeString = new UtfString["𤔣"];
        console.log[safeString.length]; // 1
    
    4 - Tạo một đối tượng chuỗi an toàn UTF mới bằng cách nối các chuỗi đã cho

  • 
    
        var safeString = new UtfString["𤔣"];
        console.log[safeString.length]; // 1
    
    5 - Xác định xem chuỗi có kết thúc bằng các ký tự của chuỗi tìm kiếm đã chỉ định hay không

  • 
    
        var safeString = new UtfString["𤔣"];
        console.log[safeString.length]; // 1
    
    6 - Kiểm tra xem chuỗi đã cho có bằng chuỗi không

  • 
    
        var safeString = new UtfString["𤔣"];
        console.log[safeString.length]; // 1
    
    7 - Tìm chỉ mục byte cho chỉ mục ký tự đã cho trong chuỗi. Ghi chú. "chỉ mục byte" thực sự là "chỉ mục chuỗi JavaScript", không phải là phần bù byte thực. Sử dụng hàm này để chuyển đổi ranh giới ký tự UTF thành chỉ mục chuỗi JavaScript

  • 
    
        var safeString = new UtfString["𤔣"];
        console.log[safeString.length]; // 1
    
    8 - Tìm chỉ mục ký tự cho chỉ mục byte đã cho. Ghi chú. "chỉ mục byte" thực sự là "chỉ mục chuỗi JavaScript", không phải là phần bù byte thực. Sử dụng hàm này để chuyển đổi chỉ mục chuỗi JavaScript thành ranh giới ký tự UTF [gần nhất]

  • 
    
        var safeString = new UtfString["𤔣"];
        console.log[safeString.length]; // 1
    
    9 - Kiểm tra xem giá trị tìm kiếm có nằm trong chuỗi không

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    30 - Tìm phiên bản đầu tiên của giá trị tìm kiếm trong chuỗi. Bắt đầu ở một phần bù tùy chọn

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    31 - Tìm phiên bản cuối cùng của giá trị tìm kiếm trong chuỗi. Bắt đầu tìm kiếm ngược với độ lệch tùy chọn, có thể âm

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    32 - Getter trả về số ký tự logic trong đối tượng chuỗi

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    33 - So khớp một chuỗi hoặc một đối tượng hỗ trợ so khớp và trả về một mảng chứa kết quả tìm kiếm đó hoặc null nếu không tìm thấy kết quả khớp

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    34 - Tạo một chuỗi mới bằng cách đệm chuỗi bằng một chuỗi đã cho [lặp lại, nếu cần] sao cho chuỗi kết quả đạt đến độ dài nhất định. Phần đệm được áp dụng ở cuối chuỗi

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    35 - Tạo một chuỗi mới bằng cách đệm chuỗi bằng một chuỗi đã cho [lặp lại, nếu cần] để chuỗi kết quả đạt đến độ dài nhất định. Phần đệm được áp dụng ở đầu chuỗi

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    36 - Trả về một chuỗi mới chứa số lượng bản sao được chỉ định của chuỗi mà nó được gọi

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    37 - Tạo một đối tượng chuỗi an toàn UTF mới với một, một số hoặc tất cả các kết quả khớp của một mẫu được thay thế bằng một mẫu thay thế

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    38 - Trả về các ký tự nằm giữa hai chỉ số đã cho trong chuỗi

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    39 - Tách một chuỗi thành các chuỗi con bằng cách sử dụng dấu tách đã chỉ định và trả về chúng dưới dạng một mảng

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    30 - Xác định xem chuỗi có bắt đầu bằng các ký tự của chuỗi tìm kiếm đã chỉ định hay không

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    31 - Trả về các ký tự bắt đầu từ chỉ mục bắt đầu đã cho cho đến chỉ mục bắt đầu cộng với độ dài đã cho

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    32 - Trả về các ký tự bắt đầu từ chỉ mục bắt đầu đã cho cho đến chỉ mục kết thúc

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    33 - Chuyển đổi chuỗi thành một mảng UTF-16 byte

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    34 - Chuyển đổi chuỗi thành một mảng các ký tự logic riêng lẻ

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    35 - Chuyển đổi chuỗi thành một mảng các điểm mã

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    36 - Trả về một chuỗi mới trong đó tất cả các ký tự chữ cái được chuyển đổi thành chữ thường mà không sửa đổi chuỗi ban đầu

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    37 - Trả về chuỗi ban đầu [không an toàn] mà đối tượng đang ẩn

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    38 - Trả về một chuỗi mới trong đó tất cả các ký tự chữ cái được chuyển thành chữ hoa mà không sửa đổi chuỗi ban đầu

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    39 - Loại bỏ khoảng trắng ở cả hai đầu của chuỗi và trả về một chuỗi mới mà không sửa đổi chuỗi ban đầu

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    40 - Loại bỏ khoảng trắng ở cuối chuỗi và trả về một chuỗi mới mà không sửa đổi chuỗi ban đầu

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    41 - Giống như
    import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    42

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    43 - Giống như
    import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    44

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    45 - Loại bỏ khoảng trắng ở đầu chuỗi và trả về một chuỗi mới mà không sửa đổi chuỗi ban đầu

Các phương thức tĩnh UtfString

Ngoài ra, lớp cung cấp các phương thức tĩnh trong trường hợp bạn muốn tiếp tục làm việc trực tiếp với các chuỗi

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    46 - Chuyển đổi một mảng UTF-16 byte thành một chuỗi

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    47 - Trả về ký tự tại chỉ mục đã cho

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    48 - Trả về điểm mã Unicode tại chỉ mục đã cho

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    49 - Chuyển đổi một mảng các điểm mã thành một chuỗi

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    30 - Tìm chỉ mục byte cho chỉ mục ký tự đã cho

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    31 - Tìm chỉ mục ký tự cho chỉ mục byte đã cho

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    32 - Chuyển đổi một mảng UTF-16 byte thành đối tượng chuỗi an toàn UTF

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    33 - Trả về một đối tượng chuỗi an toàn UTF cho điểm mã Unicode đã cho

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    34 - Chuyển đổi một mảng điểm mã thành đối tượng chuỗi an toàn UTF

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    35 - Tìm phiên bản đầu tiên của giá trị tìm kiếm trong chuỗi. Bắt đầu ở một phần bù tùy chọn

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    36 - Nối các chuỗi từ mảng đã cho thành một đối tượng chuỗi an toàn UTF mới

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    37 - Tìm phiên bản cuối cùng của giá trị tìm kiếm trong chuỗi. Bắt đầu tìm kiếm ngược với độ lệch tùy chọn, có thể âm

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    38 - Trả về số ký tự logic trong chuỗi đã cho

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    39 - Tạo một chuỗi mới bằng cách đệm chuỗi bằng một chuỗi đã cho [lặp lại, nếu cần] để chuỗi kết quả đạt đến độ dài nhất định. Phần đệm được áp dụng ở cuối chuỗi

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    60 - Tạo một chuỗi mới bằng cách đệm chuỗi bằng một chuỗi đã cho [lặp lại, nếu cần] để chuỗi kết quả đạt đến độ dài nhất định. Phần đệm được áp dụng ở đầu chuỗi

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    61 - Trả về các ký tự nằm giữa hai chỉ số đã cho

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    62 - Trả về chuỗi cho điểm mã Unicode đã cho

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    63 - Chuyển đổi một chuỗi thành một mảng UTF-16 byte

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    64 - Chuyển đổi chuỗi đã cho thành một mảng các ký tự logic riêng lẻ. Lưu ý rằng mỗi mục trong mảng được trả về có thể có nhiều hơn một ký tự UTF-16

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    65 - Chuyển đổi một chuỗi thành một mảng các điểm mã

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    66 - Trả về các ký tự bắt đầu từ chỉ mục bắt đầu đã cho cho đến chỉ mục bắt đầu cộng với độ dài đã cho

  • import { UtfString } from "utfstring";
    
    var safeString = new UtfString["𤔣"];
    console.log[safeString.length]; // 1
    67 - Trả về các ký tự bắt đầu từ chỉ mục bắt đầu đã cho cho đến chỉ mục kết thúc

Chỉ số khu vực

Một số ký tự trong tiêu chuẩn Unicode được kết hợp bởi các hệ thống hiển thị, nhưng được biểu thị bằng nhiều điểm mã. Một ví dụ điển hình là cái gọi là chỉ số khu vực. Bản thân các chỉ báo khu vực u1F1EB [ký hiệu chỉ báo khu vực chữ F] và u1F1F7 [ký hiệu chỉ báo khu vực R] không có nhiều ý nghĩa, nhưng chúng kết hợp lại tạo thành quốc kỳ Pháp. 🇫🇷

Vì các chỉ báo khu vực là các điểm mã Unicode riêng lẻ về mặt ngữ nghĩa và vì utfstring là phần phụ thuộc của các thư viện nhận biết Unicode khác, nên utfstring coi hai chỉ báo khu vực là một ký tự theo mặc định là không hợp lý. Điều đó nói rằng, có thể hữu ích khi coi chúng như vậy từ góc độ hiển thị hoặc bố cục. Để hỗ trợ cả hai kịch bản, cần có hai triển khai. Việc thực hiện đầu tiên và mặc định có sẵn thông qua các hướng dẫn ở trên. Đối với phân cụm biểu đồ trực quan, chẳng hạn như nhóm các chỉ số khu vực, hãy sử dụng lớp

import { UtfString } from "utfstring";

var safeString = new UtfString["𤔣"];
console.log[safeString.length]; // 1
68. Có sẵn các phiên bản nhận biết màn hình của tất cả các chức năng được mô tả ở trên. Sự khác biệt có thể được nhìn thấy bằng phương pháp
import { UtfString } from "utfstring";

var safeString = new UtfString["𤔣"];
console.log[safeString.length]; // 1
69

Là Java UTF

Mã hóa ký tự gốc của ngôn ngữ lập trình Java là UTF-16 . Do đó, một bộ ký tự trong nền tảng Java xác định ánh xạ giữa các chuỗi đơn vị mã UTF-16 mười sáu bit [nghĩa là chuỗi ký tự] và chuỗi byte.

UTF là gì

UTF16 thường được sử dụng làm ánh xạ trực tiếp tới các bộ ký tự nhiều byte , tức là mã hóa các ký tự được gán 0-0xFFFF ban đầu.

Các chuỗi JavaScript có phải là UTF không

Chuỗi JavaScript được mã hóa bằng UTF-16 [hoặc UCS-2, tùy thuộc vào cách triển khai; đó là một điểm khác biệt không có nhiều khác biệt]. Do đó, mọi vị trí chuỗi đề cập đến 16 bit dữ liệu hoặc 2 byte.

là UTF

Mã hóa UTF-8 thích hợp hơn UTF-16 trên phần lớn các trang web vì mã hóa này sử dụng ít bộ nhớ hơn. Nhớ lại rằng UTF-8 mã hóa từng ký tự ASCII chỉ trong một byte. UTF-16 phải mã hóa các ký tự giống nhau này thành hai hoặc bốn byte.

Chủ Đề