Php phát hiện các ký tự unicode

Tôi có khoảng 1000 tên tệp được đọc bởi

import logging
def force_decode[string, codecs=['utf8', 'cp1252']]:
    for i in codecs:
        try:
            return string.decode[i]
        except UnicodeDecodeError:
            pass

    logging.warn["cannot decode url %s" % [[string]]]

for item in os.listdir[rootPath]:
    #Convert to Unicode
    if isinstance[item, str]:
        item = force_decode[item]
    print item
8, một số trong số chúng được mã hóa bằng UTF8 và một số là CP1252

Nội dung chính Hiển thị

  • Làm cách nào để biết mã hóa của một chuỗi?
  • Làm cách nào để kiểm tra xem tệp có phải là UTF không
  • Làm cách nào để kiểm tra xem một chuỗi có phải là Unicode không?
  • làm gì. mã hóa làm gì trong Python?

Tôi muốn giải mã tất cả chúng thành Unicode để xử lý thêm trong tập lệnh của mình. Có cách nào để mã hóa nguồn giải mã chính xác thành Unicode không?

Thí dụ

for item in os.listdir[rootPath]:

    #Convert to Unicode
    if isinstance[item, str]:
        item = item.decode['cp1252']  # or item = item.decode['utf-8']
    print item

BartoszKP

33. 8k13 huy hiệu vàng103 huy hiệu bạc128 huy hiệu đồng

đã hỏi ngày 10 tháng 4 năm 2013 lúc 6. 14

0

Sử dụng thư viện chardet. nó siêu dễ

import chardet

the_encoding = chardet.detect['your string']['encoding']

và thế là xong

trong python3, bạn cần cung cấp loại byte hoặc bytearray để

import chardet
the_encoding = chardet.detect[b'your string']['encoding']

đã trả lời 5 tháng 8 năm 2017 lúc 19. 08

george george

1.60015 huy hiệu bạc16 huy hiệu đồng

8

nếu các tệp của bạn ở dạng

import logging
def force_decode[string, codecs=['utf8', 'cp1252']]:
    for i in codecs:
        try:
            return string.decode[i]
        except UnicodeDecodeError:
            pass

    logging.warn["cannot decode url %s" % [[string]]]

for item in os.listdir[rootPath]:
    #Convert to Unicode
    if isinstance[item, str]:
        item = force_decode[item]
    print item
9 và
import json

json.detect_encoding[b"Hello"]
0, thì có một cách dễ dàng

import logging
def force_decode[string, codecs=['utf8', 'cp1252']]:
    for i in codecs:
        try:
            return string.decode[i]
        except UnicodeDecodeError:
            pass

    logging.warn["cannot decode url %s" % [[string]]]

for item in os.listdir[rootPath]:
    #Convert to Unicode
    if isinstance[item, str]:
        item = force_decode[item]
    print item

mặt khác, có một bộ ký tự phát hiện lib

Python - phát hiện bộ ký tự và chuyển đổi thành utf-8

https. //pypi. con trăn. org/pypi/chardet

đã trả lời 10 tháng 4 năm 2013 lúc 6. 27

lucemia lucemia

6.0975 huy hiệu vàng39 huy hiệu bạc74 huy hiệu đồng

0

Bạn cũng có thể sử dụng gói

import json

json.detect_encoding[b"Hello"]
1 để phát hiện mã hóa

import json

json.detect_encoding[b"Hello"]

đã trả lời 5 tháng 5 năm 2021 lúc 12. 51

Suyog Shimpi Suyog Shimpi

6121 huy hiệu vàng7 huy hiệu bạc15 huy hiệu đồng

0

Mã hóa được phát hiện của

import chardet

the_encoding = chardet.detect['your string']['encoding']
0 có thể được sử dụng để giải mã một mảng phụ mà không có bất kỳ ngoại lệ nào, nhưng chuỗi đầu ra có thể không chính xác

Đối với một lập trình viên PHP hay MySQL, mọi thứ có vẻ khá dễ dàng và thoải mái khi làm việc với dữ liệu chỉ bao gồm các ký tự tiếng Anh. Cho đến khi bạn vướng vào sự cố rắc rối của mã hóa UTF-8 trong xử lý ngôn ngữ không phải tiếng Anh. Nói sơ lược về mã hóa UTF-8 thì đây là một ký tự mã hóa kiểu của ký tự Unicode. Nó được thiết kế để tương thích ngược với mã hóa ASCII và tránh những nhược điểm của UTF-16 và UTF-32. UTF-8 trở thành kiểu mã hóa phổ biến và sử dụng ưu tiên thay thế khi hơn một nửa số trang web hiện tại sử dụng kiểu mã hóa này. Trong bài viết này, sẽ có 3 hướng dẫn chính được trình bày để có thể sử dụng mã hóa UTF-8 trong PHP và MySQL

  • Change in file config
    import json
    
    json.detect_encoding[b"Hello"]
    
    2 and PHP code
  • Thay đổi trong cấu hình tệp
    import json
    
    json.detect_encoding[b"Hello"]
    
    3 và các vấn đề liên quan khác đến MySQL
  • Thay đổi dữ liệu trong cơ sở dữ liệu MySQL sử dụng mã hóa latin1 thành mã hóa UTF-8

PHP và mã hóa UTF-8

Để sử dụng UTF-8 là ký tự mã hóa mặc định, thay đổi ở tệp cấu hình

import json

json.detect_encoding[b"Hello"]
2 như sau.
import json

json.detect_encoding[b"Hello"]
5 Change in PHP code

at header

 $link = mysql_connect['localhost', 'user', 'password'];
 mysql_set_charset['utf8', $link];
0

Trong tệp XML

 $link = mysql_connect['localhost', 'user', 'password'];
 mysql_set_charset['utf8', $link];
1 Tuy nhiên, không phải tất cả các ký tự UTF-8 đều được chấp nhận trong XML, vì vậy cần loại bỏ các ký tự này. Một hàm hữu ích sau đây có thể giải quyết vấn đề trên

________số 8

Trọng HTML

  • nội dung HTML.
     $link = mysql_connect['localhost', 'user', 'password'];
     mysql_set_charset['utf8', $link];
    
    2
  • biểu mẫu HTML.
     $link = mysql_connect['localhost', 'user', 'password'];
     mysql_set_charset['utf8', $link];
    
    3

Chỉ định UTF-8 trong hàm hmlspecialchars

 $link = mysql_connect['localhost', 'user', 'password'];
 mysql_set_charset['utf8', $link];
4

Khi kết nối với MySQL

Sử dụng hàm

 $link = mysql_connect['localhost', 'user', 'password'];
 mysql_set_charset['utf8', $link];
5

 $link = mysql_connect['localhost', 'user', 'password'];
 mysql_set_charset['utf8', $link];

Từ PHP 5. 5. 0, hàm

 $link = mysql_connect['localhost', 'user', 'password'];
 mysql_set_charset['utf8', $link];
5 được thay thế bởi
 $link = mysql_connect['localhost', 'user', 'password'];
 mysql_set_charset['utf8', $link];
7

import chardet

the_encoding = chardet.detect['your string']['encoding']
6

Sử dụng hàm xử lý chuỗi tương thích với UTF-8

Có nhiều hàm sẽ gặp lỗi hoặc xử lý sai khi một ký tự cần nhiều hơn 1 byte [chẳng hạn như UTF-8]. Ví dụ hàm

 $link = mysql_connect['localhost', 'user', 'password'];
 mysql_set_charset['utf8', $link];
8 sẽ trả về số lượng byte chứ không phải ký tự số lượng. Để giải quyết vấn đề này có 2 tùy chọn

  1. Sử dụng các hàm
     $link = mysql_connect['localhost', 'user', 'password'];
     mysql_set_charset['utf8', $link];
    
    9 [ví dụ. `iconv_strlen,…]. Dù vậy, bản thân chuỗi ký tự vẫn cần phải đảm bảo được mã hóa đúng
  2. Tiện ích mở rộng
    import chardet
    
    the_encoding = chardet.detect['your string']['encoding']
    
    60. extension cung cấp một tập tin đầy đủ các hàm cho việc xử lý mã hóa sử dụng nhiều byte [multibyte]

MySQL với mã hóa UTF-8

Change in file config my. ban đầu

import chardet
the_encoding = chardet.detect[b'your string']['encoding']
0
  • MySQL UTF-8 thực sự chỉ là một phần của ký tự UTF-8 file khi chỉ sử dụng tối đa 3 byte trong khi mã hóa UTF-8 yêu cầu 4 byte. Do đó, một số ký tự không được hỗ trợ trong MySQL UTF-8. Move from MySQL 5. 5. 3, điều này có thể được giải quyết đối với tập ký tự
    import chardet
    
    the_encoding = chardet.detect['your string']['encoding']
    
    61
  • Trong trường hợp không cài đặt mã hóa khi kết nối với MySQL, sau khi kết nối xong, có thể sử dụng lệnh/truy vấn sau.
    import chardet
    
    the_encoding = chardet.detect['your string']['encoding']
    
    62
  • Khi xác định kích thước của các trường kiểu varchar, đừng quên UTF-8 yêu cầu 4 byte trên mỗi ký tự

Chuyển đổi dữ liệu bằng cách sử dụng mã hóa latin1 sang UTF-8

  1. Thiết lập cài đặt tại file config
    import json
    
    json.detect_encoding[b"Hello"]
    
    3 như hướng dẫn thứ 2
  2. Thực hiện câu lệnh sau.
    import chardet
    
    the_encoding = chardet.detect['your string']['encoding']
    
    64tên-db-của-bạn
    import chardet
    
    the_encoding = chardet.detect['your string']['encoding']
    
    65
  3. Xác nhận mọi thứ đã được cài đặt về UTF-8
    import chardet
    
    the_encoding = chardet.detect['your string']['encoding']
    
    66
  4. Tạo kết xuất tệp cho việc chuyển đổi.
    import chardet
    
    the_encoding = chardet.detect['your string']['encoding']
    
    67
  5. Thay thế bộ ký tự trong kết xuất tệp từ latin1 sang UTF-8 Ví dụ sử dụng Perl.
    import chardet
    
    the_encoding = chardet.detect['your string']['encoding']
    
    68 Đối với người dùng Windows. Chuyển đổi có thể được thực hiện bằng WordPad sử dụng chức năng tìm và thay thế
  6. Kể từ giờ, việc thay đổi sẽ được thực hiện trên cơ sở dữ liệu nên đảm bảo sao lưu dữ liệu trước khi thực hiện
    import chardet
    
    the_encoding = chardet.detect['your string']['encoding']
    
    69
  7. Tìm kiếm những bản ghi có thể bị chuyển đổi sai và sửa đổi chúng [ví dụ những ký tự được mã hóa 2 lần]. Vì các ký tự không phải ASCII là nhiều byte [sử dụng nhiều hơn 1 byte/ký tự] nên có thể tìm thấy chúng bằng cách so sánh số lượng byte và số lượng ký tự
  • Kiểm tra xem có ký tự multi-byte hay không [nếu truy vấn sau đó trả về 0 thì không có ký tự multi-byte và có thể bỏ qua các bước tiếp theo]
    import chardet
    the_encoding = chardet.detect[b'your string']['encoding']
    
    00
  • Sao chép các hàng có ký tự nhiều byte sang bảng tạm thời
import logging
def force_decode[string, codecs=['utf8', 'cp1252']]:
    for i in codecs:
        try:
            return string.decode[i]
        except UnicodeDecodeError:
            pass

    logging.warn["cannot decode url %s" % [[string]]]

for item in os.listdir[rootPath]:
    #Convert to Unicode
    if isinstance[item, str]:
        item = force_decode[item]
    print item
0
  • Chuyển đổi ký tự đã được mã hóa UTF-8 2 lần về định dạng UTF-8 chuẩn. Vì MySQL đã tự động chuyển đổi dữ liệu sang UTF-8 một lần nữa trên dữ liệu UTF-8 nên cần một “thủ thuật” nhỏ để tránh việc chuyển đổi này. Đầu tiên, chuyển đổi kiểu mã hóa về latin1, mã hóa đó 2 lần sẽ bị loại bỏ.
    import chardet
    the_encoding = chardet.detect[b'your string']['encoding']
    
    01 Lưu ý. Can set true data type. Như ví dụ trên là
    import chardet
    the_encoding = chardet.detect[b'your string']['encoding']
    
    02 Vấn đề bây giờ là nếu cài đặt cột hiện tại về mã hóa UTF-8, MySQL sẽ chuyển đổi từ latin1 về UTF-8. Để tránh việc này, chúng ta thay đổi kiểu dữ liệu của cột về
    import chardet
    the_encoding = chardet.detect[b'your string']['encoding']
    
    03 rồi sau đó mới cài đặt UTF-8. Điều này được hưởng lợi từ việc MySQL không chuyển đổi kiểu mã hóa của một
    import chardet
    the_encoding = chardet.detect[b'your string']['encoding']
    
    03
import logging
def force_decode[string, codecs=['utf8', 'cp1252']]:
    for i in codecs:
        try:
            return string.decode[i]
        except UnicodeDecodeError:
            pass

    logging.warn["cannot decode url %s" % [[string]]]

for item in os.listdir[rootPath]:
    #Convert to Unicode
    if isinstance[item, str]:
        item = force_decode[item]
    print item
5
  • Loại bỏ các hàng chỉ có ký tự byte đơn [sử dụng một byte] ra khỏi bảng tạm thời.
    import chardet
    the_encoding = chardet.detect[b'your string']['encoding']
    
    05
  • Replace data into main table
    import chardet
    the_encoding = chardet.detect[b'your string']['encoding']
    
    06
  1. Tra cứu dữ liệu còn lại, nếu cần thì thực hiện lại từ bước 7

Lời kết

Mã hóa dữ liệu yêu cầu xử lý trọng và tỉ lệ. Nếu hiểu rõ về nó, lập trình viên có thể tiết kiệm một khoảng thời gian và công sức đáng kể khi đối mặt với những vấn đề về dữ liệu. Bài viết này như một lần khẳng định nữa định tầm quan trọng của công việc đã cân nhắc khi định nghĩa bộ ký tự trong dự án cũng như môi trường phát triển ngay từ ban đầu

Chủ Đề