10 Câu hỏi: Cách sửa lỗi byte 1 không hợp lệ của chuỗi UTF-8 1 byte

câu hỏi được tạo ra tại Thu, Apr 10, 2014 12:00 AM

Tôi đang cố gắng tìm nạp xml bên dưới từ db bằng phương thức java nhưng tôi gặp lỗi

Mã được sử dụng để phân tích xml

 49 310

Dữ liệu

 49 310

LRI

 49 310

Tôi đọc trong một số chủ đề vì một số ký tự đặc biệt trong xml. Làm cách nào để khắc phục sự cố này?

    
25
  1. Như bạn có thể nhận thấy câu hỏi của mình thật khó hiểu nếu không có định dạng đúng.
    2013-03-21 11: 06: 12Z
  2. Không có ích gì khi bạn không hiển thị bất kỳ mã nào, nhưng tôi nghi ngờ về cơ bản tệp XML của bạn không hợp lệ. Tôi nghi ngờ nó tự xưng là UTF-8 nhưng không UTF-8. Bạn nên sửa bất cứ thứ gì tạo ra tệp xấu.
    2013-03-21 11: 06: 21Z
  3. Chắc chắn kiểm tra cơ sở dữ liệu; nếu được lưu trữ chính xác dưới dạng UTF-8, hãy kiểm tra xem trình kết nối java có cần cài đặt thành UTF-8 hay không (đối với MySQL). Nếu cơ sở dữ liệu được xác định sai, hãy nỗ lực chuyển sang UTF-8 vì nó linh hoạt hơn.
    2013-03-21 11: 19: 13Z
  4. Xin chào, bạn có thể cho ai đó biết nơi này sẽ được xác định trong db
    2013-03-22 22: 18: 22Z
  5. Bạn có thể hiển thị kết xuất hex của vài chục byte đầu tiên của đầu vào không?
    2013-04-26 18: 41: 42Z
10 Câu trả lời                              10                         
  

Cách khắc phục sự cố này?

Đọc dữ liệu bằng mã hóa ký tự chính xác. Thông báo lỗi có nghĩa là bạn đang cố đọc dữ liệu dưới dạng UTF-8 (cố tình hoặc vì đó là mã hóa mặc định cho tệp XML không chỉ định 49 310) nhưng thực tế nó ở dạng mã hóa khác như ISO-8859- 1 hoặc Windows-1252.

Để có thể tư vấn về cách bạn nên làm điều này, tôi phải xem mã bạn hiện đang sử dụng để đọc XML.

    
18
2013-03-21 11: 11: 35Z
  1. tôi gặp lỗi này khi cố phân tích xml bằng mã bên dưới
    2013-04-26 18: 37: 42Z
  2. Cảm ơn tất cả các bạn đã quản lý để khắc phục sự cố. Bằng cách đặt encodin thành ISO-8859-1 cho trước khi phân tích DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance (); DocumentBuilder db = dbf.newDocumentBuilder (); InputSource là = new InputSource (new ByteArrayInputStream (cond.getBytes ())); is.setEncoding ("ISO-8859-1"); Đã thêm dòng này vào mã hiện tại Document doc = db.parse (is); Phần tử elem = doc.getDocumentEuity ();
    2013-05-01 16: 10: 48Z
  1. Mở xml trong notepad
  2. Đảm bảo bạn không có thêm dung lượng ở đầu và cuối tài liệu.
  3. Chọn Tệp - > Lưu dưới dạng
  4. chọn lưu dưới dạng - > Tất cả các tệp
  5. Nhập tên tệp dưới dạng abcd.xml
  6. chọn Mã hóa - UTF-8 - > Nhấp vào Lưu
17
2014-11-21 08: 43: 18Z
  1. cách đơn giản .... đã giải quyết vấn đề của tôi.
    2015-07-21 11: 49: 25Z
  2. đáng để đề cập đến việc này hoạt động trên notepad và không phải trên notepad ++
    2016-10-10 09: 45: 13Z
  3. Đã giải quyết vấn đề của tôi.
    2016-12-30 04: 21: 14Z
  4. rất đơn giản. rất hữu ích
    2018-07-23 22: 22: 22Z

Hãy thử:

 49 310

Nếu đó là bất cứ điều gì khác ngoài UTF-8, chỉ cần thay đổi phần mã hóa cho phần tốt.

    
7
2013-03-21 11: 09: 49Z
  1. Tôi nghĩ đó là câu trả lời tốt nhất vì nó cho phép xử lý lỗi được mô tả cho tất cả các loại InputStreams, không chỉ các tệp.
    2015-12-25 12: 00: 42Z

Tôi đã nhận xml dưới dạng Chuỗi và sử dụng xml.getBytes () và gặp lỗi này. Thay đổi thành xml.getBytes (Charset.forName ("UTF-8")) đã làm việc cho tôi.

    
3
2017-07-25 17: 07: 41Z
  1. Điều này hiệu quả với tôi. Mọi người khác đều "sai" về vấn đề của tôi. Tôi đã làm điều tương tự như bạn. Đọc một tệp dưới dạng chuỗi, nhận các byte là không phải UTF8 và nhận lỗi SAX. Đó là 49 310 hoạt động.
    2018-05-02 17: 03: 17Z

Tôi gặp vấn đề này, nhưng tệp ở dạng UTF-8, chỉ là bằng cách nào đó, nhân vật xuất hiện không được mã hóa trong UTF-8. Để giải quyết vấn đề tôi đã làm những gì được nêu trong chủ đề này, tức là tôi đã xác thực tệp: Cách kiểm tra xem một tệp có hợp lệ UTF-8 không?

Về cơ bản, bạn chạy lệnh:

$iconv -f UTF-8 your_file -o /dev /null

Và nếu có thứ gì đó không được mã hóa trong UTF-8, nó sẽ cung cấp cho bạn số dòng và số hàng để bạn có thể tìm thấy nó.

    
1
2017-05-23 10: 31: 27Z

Tôi tình cờ gặp phải vấn đề này vì bản dựng Ant.

Bản dựng Ant đó đã lấy các tệp và áp dụng 49 310 cho nó. Trong quá trình lọc tệp này, mã hóa ký tự không phải UTF-8 mặc định của máy Windows của tôi đã được sử dụng để tạo các tệp được lọc - do đó, các ký tự bên ngoài bộ ký tự của nó không thể được ánh xạ chính xác.

Một giải pháp là cung cấp cho Ant một biến môi trường rõ ràng cho UTF-8. Trong Cygwin, trước khi khởi chạy Ant: 49 310.

    
0
2016/02/03 14: 48: 57Z

Tôi đã gặp vấn đề tương tự và sau khi điều tra lâu về tệp XML của mình, tôi đã phát hiện ra vấn đề: có một vài ký tự không được giải mã như 49 310 49 310.

    
0
2016/02/17 23: 47: 42Z

Những người như tôi hiểu nguyên tắc mã hóa ký tự, cũng đọc bài viết của Joel thật buồn cười vì nó dù sao cũng chứa các ký tự sai vẫn không thể hiểu được cái quái gì (cảnh báo spoiler, Tôi là người dùng Mac), giải pháp của bạn có thể đơn giản như xóa repo cục bộ của bạn và sao chép lại .

Cơ sở mã của tôi không thay đổi kể từ lần cuối nó chạy OK nên không có lỗi UTF vì thực tế là hệ thống xây dựng của chúng tôi không bao giờ phàn nàn về nó .... cho đến khi tôi nhớ rằng tôi đã vô tình rút phích cắm máy tính của mình Vài ngày trước với IntelliJ Idea và toàn bộ hoạt động (Java /Tomcat /Hibernate)

Máy Mac của tôi đã làm một công việc tuyệt vời khi giả vờ không có gì xảy ra và tôi vẫn tiếp tục công việc như bình thường nhưng hệ thống tệp cơ bản bị lỗi bằng cách nào đó. Đã lãng phí cả ngày cố gắng để tìm ra điều này. Tôi hy vọng nó sẽ giúp được ai đó.

    
0
2017-11-15 18: 30: 50Z

Tôi gặp vấn đề tương tự trong ứng dụng JSF của mình khi có một dòng nhận xét có chứa một số ký tự đặc biệt trong trang XMHTL. Khi tôi so sánh phiên bản trước trong nhật thực của mình, nó có một nhận xét,

 49 310

Đã xóa các ký tự đó và trang được tải tốt. Chủ yếu là nó có liên quan đến các tệp XML, vì vậy vui lòng so sánh nó với phiên bản làm việc.

    
0
2018-11-24 12: 58: 37Z

Tôi đã có cùng một vấn đề. Vấn đề của tôi là nó bị thiếu đối số -Dfile.encoding = UTF8 theo đối số JAVA_OPTION trong tệp statWeblogic.cmd trong máy chủ WebLogic.

    
0
2019-02-13 09: 40: 03Z
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();

InputSource is = new InputSource(new ByteArrayInputStream(cond.getBytes()));

Document doc = db.parse(is);

Element elem = doc.getDocumentElement();

// here we expect a series of <data><name>N</name><value>V</value></data>
NodeList nodes = elem.getElementsByTagName("data");

TableID jobId = new TableID(_processInstanceId);
Job myJob = Job.queryByID(_clientContext, jobId, true);

if (nodes.getLength() == 0) {
    log(Level.DEBUG, "No data found on condition XML");

}

for (int i = 0; i < nodes.getLength(); i++) {
    // loop through the <data> in the XML

    Element dataTags = (Element) nodes.item(i);
    String name = getChildTagValue(dataTags, "name");
    String value = getChildTagValue(dataTags, "value");

    log(Level.INFO, "UserData/Value=" + name + "/" + value);

    myJob.setBulkUserData(name, value);
}

myJob.save();
nguồn đặt đây