Vấn đề gì khiến mọi người sử dụng mã hóa cụ thể của Nhật Bản hơn là Unicode?


24

Tại nơi làm việc, tôi bắt gặp rất nhiều tệp văn bản tiếng Nhật trong Shift-JIS và các bảng mã khác. Nó gây ra nhiều vấn đề về mojibake (nhân vật không thể đọc được) cho tất cả người dùng máy tính. Unicode được dự định để giải quyết loại vấn đề này bằng cách xác định một bộ ký tự duy nhất cho tất cả các ngôn ngữ và việc xê-ri hóa UTF-8 được khuyến nghị sử dụng trên Internet. Vậy tại sao mọi người không chuyển từ mã hóa cụ thể của Nhật Bản sang UTF-8? Những vấn đề với hoặc bất lợi của UTF-8 đang kìm hãm mọi người?

EDIT: W3C liệt kê một số vấn đề đã biết với Unicode , đây có thể là một lý do không?


Trên thực tế, ngày càng có nhiều trang web phổ biến hơn trong UTF-8, một ví dụ là ニ コ ニ コ và は て な
Ken Li

8
Tại sao mọi người không chuyển từ ISO-8851-1 sang UTF-8?
ysdx

1
Điều được đề cập khi chuyển qua đây là chuyển đổi SHIFT-JIS -> UTF-8 không mất mát, đó sẽ là lý do chính để tiếp tục sử dụng SHIFT-JIS khi nó đã được sử dụng. Mặc dù vậy, tôi thấy rằng thực tế đáng ngạc nhiên là đáng ngạc nhiên, vì vậy tôi hy vọng một trong những câu trả lời ở đây có thể đi sâu vào chi tiết hơn hoặc ít nhất là cung cấp một nguồn cho khiếu nại, nhưng không ai trong số họ làm được.
Kyle Strand


@LudwigSchulze Cảm ơn. Vẫn không có nhiều thông tin chi tiết, nhưng ít nhất là một nguồn chính thức ...
Kyle Strand

Câu trả lời:


28

Trong một từ: di sản.

Shift-JIS và các bảng mã khác đã được sử dụng trước khi Unicode trở nên khả dụng / phổ biến, vì đó là cách duy nhất để mã hóa tiếng Nhật. Các công ty đã đầu tư vào cơ sở hạ tầng chỉ hỗ trợ Shift-JIS. Ngay cả khi cơ sở hạ tầng đó hiện hỗ trợ Unicode, chúng vẫn bị kẹt với Shift-JIS vì nhiều lý do khác nhau, từ nó hoạt động-vì vậy đừng chạm vào nó qua mã hóa-gì? để di chuyển-tất cả các tài liệu hiện có-quá-tốn kém .

Có nhiều công ty phương Tây vẫn đang sử dụng ASCII hoặc latin-1 vì những lý do tương tự, chỉ có ai thông báo vì nó không bao giờ gây ra vấn đề.


8
Công nghiệp phần mềm Nhật Bản ... chậm hơn so với việc sử dụng các tiêu chuẩn / phần mềm mới.
Mark Hosang

2
@Mark Truer lời đã được nói! (Tôi đang làm việc trong / với CNTT Nhật Bản ... -_- ;;)
lừa dối

5
Đúng, nhưng các công ty phương Tây lấy cớ rằng phần mềm kế thừa của chúng tôi chứa đầy các giả định được mã hóa cứng là 1 byte = 1 ký tự, điều này khiến việc chuyển đổi sang UTF-8 trở nên khó khăn hơn so với người châu Á từ lâu đã phải viết mã sạch MBCS.
dan04

@MarkHosang Tôi xác nhận rằng tuyên bố của bạn là chính xác 100% (Tôi làm việc cho công ty Nhật Bản tại Tokyo)
Hassan Tareq

9

Đây là những lý do mà tôi nhớ được đưa ra vì không tạo UTF-8 hoặc một đại diện Unicode khác làm mã hóa ký tự mặc định cho ngôn ngữ kịch bản lệnh Ruby, được phát triển chủ yếu ở Nhật Bản:

  • Lý do 1: Hán thống nhất . Các bộ ký tự (không chắc chắn nếu "bảng chữ cái" sẽ chính xác ở đây) được sử dụng ở Trung Quốc, Hàn Quốc và Nhật Bản đều có liên quan, đã phát triển từ lịch sử chung, không chắc chắn về các chi tiết. Liên minh Unicode đã quyết định chỉ lãng phí một điểm mã Unicode duy nhất để mã hóa tất cả các biến thể (tiếng Trung, tiếng Nhật và tiếng Hàn) của cùng một ký tự lịch sử, ngay cả khi ngoại hình của chúng khác nhau ở cả 3 ngôn ngữ. Lý do của họ là, ngoại hình nên được xác định bởi phông chữ được sử dụng để hiển thị văn bản.

Rõ ràng, lý do này được người dùng Nhật Bản coi là vô lý như nó sẽ gây tranh cãi với độc giả tiếng Anh rằng, vì bảng chữ cái Latinh đã phát triển từ bảng chữ cái Hy Lạp, chỉ cần có một điểm mã duy nhất cho tiếng Hy Lạp alpha " α "và Latin" a "và để cho sự xuất hiện được quyết định bởi phông chữ được sử dụng. (Tương tự cho "" = "b", "" = "g", v.v.)

(Lưu ý rằng tôi sẽ không thể đưa các ký tự Hy Lạp vào đây trên stackexchange nếu đó là trường hợp.)

  • Lý do 2: Chuyển đổi nhân vật không hiệu quả. Việc chuyển đổi các ký tự từ Unicode sang mã hóa và ngược lại của Nhật Bản yêu cầu các bảng, nghĩa là không có phép tính đơn giản nào từ giá trị điểm mã Unicode sang giá trị điểm mã kế thừa và ngược lại. Ngoài ra, có một số mất thông tin khi chuyển đổi vì không phải tất cả các điểm mã trong một mã hóa đều có một đại diện duy nhất trong mã hóa khác.

Nhiều lý do có thể đã được đưa ra mà tôi không nhớ nữa.


Có vẻ như kể từ 2.0, Ruby đã sử dụng UTF-8 làm mặc định. Nhưng sự thống nhất của Han dường như là một nếp nhăn thực sự quan trọng (và là vấn đề gây tranh cãi ) trong thế giới Unicode mà dường như không có đủ sự chú ý, vì tôi chưa bao giờ nghe về nó trước đây.
Kyle Strand

Và đây là một bài viết trên Wikipedia về vấn đề thống nhất Han: en.wikipedia.org/wiki/Han_unification Đó thực sự là một vấn đề hợp lệ, câu trả lời tuyệt vời! Ngoài ra, mất ngày sẽ là một lý do tốt.
spbnick

8

Câu trả lời của deceze có yếu tố sự thật rất mạnh đối với nó, nhưng có một lý do khác khiến Shift-JIS và các ngôn ngữ khác vẫn được sử dụng: UTF-8 không hiệu quả khủng khiếp đối với một số ngôn ngữ, chủ yếu là trong bộ CJK. Shift-JIS là, IIRC, mã hóa rộng hai byte trong khi UTF-8 thường là 3 byte và đôi khi là 4 byte trong các mã hóa của nó với CJK và các loại khác.


7
Trong khi đó là sự thật, luôn có sự thay thế của UTF-16, có thể hiệu quả như Shift-JIS. Tôi cũng cho rằng sự đau đầu trong việc xử lý các mã hóa khác nhau vượt xa sự gia tăng nhẹ về kích thước trong thời đại ngày nay. Nói cách khác, tôi chưa bao giờ nghe thấy lập luận về hiệu quả của Shift-JIS bởi bất kỳ ai vẫn đang sử dụng nó. ;-)
lừa dối

5
Tuy nhiên, tôi đã nghe vấn đề hiệu quả được sử dụng như một cái cớ cho sự lười biếng và quán tính.
CHỈ CẦN HOẠT ĐỘNG CỦA TÔI NGÀY

1
UTF-16 làm cho các ký tự ASCII cơ bản [trong đó có một số khá lớn trong ví dụ HTML] lớn gấp đôi. Theo tôi hiểu, điều này thực sự khiến UTF-16 thậm chí còn tệ hơn UTF-8 cho các trang web Nhật Bản.
Random832

2
@JUST HOẠT ĐỘNG chính xác của tôi: Hãy thử "Xem nguồn" hoặc tương đương. Giả sử tất cả các văn bản thực tế là bằng tiếng Nhật, có thể có rất nhiều từ khóa và những từ tương tự có nguồn gốc từ tiếng Anh và được trình bày trong ASCII.
David Thornley

4
Điều này nghe với tôi như một lý do để làm như vậy chúng ta tìm thấy sau đó . Tôi khá chắc chắn rằng hiệu quả gần như hoàn toàn không có gì để làm với hiện trạng. Đối với tôi đó chỉ là quán tính và di sản. Trên thực tế tôi cũng nghĩ rằng nó phải liên quan đến thực tế là hầu hết các mã được tạo bởi các lập trình viên Nhật Bản là dành cho những người Nhật Bản khác, vì vậy họ thậm chí không cảm thấy cần phải sử dụng một cái gì đó như Unicode.
Julien Guertault

2

Đếm kích thước chuỗi / sử dụng bộ nhớ trong số các lý do chính.

Trong UTF-8, các ngôn ngữ Đông Á thường cần 3 byte trở lên cho các ký tự của chúng. Trung bình họ cần bộ nhớ nhiều hơn 50% so với khi sử dụng UTF-16 - thứ hai đã kém hiệu quả hơn so với mã hóa tự nhiên.

Lý do chính khác sẽ là di sản, như được chỉ ra bằng cách lừa dối.


2

Di sản và kích thước lưu trữ, như những người khác nói, nhưng có một điều nữa: nhân vật Katakana.

Chỉ mất một byte để thể hiện các ký tự Katakana trong Shift-JIS, do đó, văn bản tiếng Nhật bao gồm Katakana chỉ mất ít hơn 2 byte cho mỗi ký tự (1,5 cho hỗn hợp 50/50), giúp Shift-JIS hiệu quả hơn một chút so với UTF-16 (2 byte / char) và hiệu quả hơn nhiều so với UTF-8 (3 byte / char).

Lưu trữ giá rẻ nên đã làm cho vấn đề này nhỏ hơn nhiều, nhưng dường như không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.