2008-11-17 25 views
67

Tôi đang sử dụng xsl để kiểm soát đầu ra của tệp xml của tôi, nhưng ký tự BOM đang được thêm.Làm cách nào để xóa ký tự BOM khỏi tệp xml

+2

Không giống như một bản sao như câu hỏi khác đề cập đến công cụ cụ thể. – vitaut

+0

Không giống như trên các tệp văn bản thuần túy, một dấu thứ tự byte trên một tệp XML sẽ không bao giờ gây ra bất kỳ vấn đề nào, vì tất cả các trình phân tích cú pháp XML có thể xử lý nó ngay cả khi đó là "UTF-8 BOM". Trong thực tế, nó thậm chí còn được đề xuất trên chính tiêu chuẩn XML như là một phần của character encoding autodetection. – CesarB

+0

Đây không phải là một gợi ý, phần F không phải là quy chuẩn. Một UTF-8 BOM được cho phép một cách rõ ràng theo tiêu chuẩn Unicode, nhưng không được khuyến nghị - http://en.wikipedia.org/wiki/Byte_order_mark#cite_note-2 - BOM UTF-8 không biểu thị thứ tự byte. – mjn

Trả lời

1

Chỉ cần tách hai byte đầu tiên bằng bất kỳ trình chỉnh sửa hex nào.

+10

Hoặc 3, tùy thuộc vào hương vị UTF – MSalters

+5

Hoặc 4, đối với UTF-32. Nhưng rất có thể là 3, UTF-8 là mã hóa phổ biến nhất cho XML. –

0

Tôi đã ấn tượng rằng XML được khuyến khích viết bằng Unicode, trong một số mã hóa Unicode và một số mã hóa Unicode nhất định được chỉ định để chứa dấu thứ tự byte ban đầu. Nếu không có dấu thứ tự byte đó, tệp của bạn không còn được mã hóa chính xác trong mã hóa Unicode nữa và do đó không còn đúng XML nữa. Bộ vi xử lý XML được khuyến khích để không được tha thứ, để thất bại ngay lập tức trên các lỗi nhỏ nhất (chẳng hạn như một mã hóa Unicode không chính xác). Những loại bộ vi xử lý XML mà bạn đang muốn phá vỡ? Rõ ràng, việc xóa một dấu thứ tự byte từ một tài liệu được mã hóa UTF-8 làm cho tài liệu đó được mã hóa ASCII (không phải Unicode), và một số bộ xử lý văn bản chỉ có khả năng sử dụng các tài liệu được mã hóa ASCII. Đây có phải là những gì bạn đang làm việc không?

+0

Đối với các tệp XML không chỉ định mã hóa và không có BOM, UTF-8 là mã hóa mặc định. – mjn

0

Bộ mã hóa đầu ra là bộ XSL của bạn để sử dụng? Mã hóa nào là tài liệu đầu vào? Đầu vào đến từ đâu và nó được lưu/tải lên/tải xuống trong thời gian chờ đợi ở đâu?

XML và XSL phải mặc định để sử dụng UTF-8 nếu không có gì khác được chỉ định. Nhưng rõ ràng, có gì đó không ổn ở đây.

Một điều có thể xảy ra là, XML đang được phục vụ bởi máy chủ web được đặt theo mặc định để phân phối theo ISO-8859-1, mặc định khá tốt ... tiền-Unicode.

Hơi tắt chủ đề, nhưng Joel's very instructive article về mã hóa văn bản là một điều mở mắt đối với tôi. Có rất nhiều người ngoài kia, những người rất thông minh về lập trình, nhưng vẫn kiên trì nghĩ rằng có một thứ như "văn bản thuần túy" hoặc gọi văn bản "ASCII" hoặc "ANSI" của họ. Đó là một vấn đề bạn thực sự cần phải nắm bắt nếu bạn chưa có.

164
# vim file.xml 
:set nobomb 
:wq 
18

File BOM Detector (phần mềm miễn phí cho Windows) giúp dễ dàng xóa dấu thứ tự byte.

+0

+1 Tôi có một loạt các tệp với BOM trong đó và công cụ này giúp tôi dễ dàng sửa chúng. Chỉ có cách để hàng loạt nó mà tôi tìm thấy cho đến nay mà không cần viết một kịch bản. Cảm ơn! –

+0

+1 Đó là một thiết bị độc lập nhỏ.exe mà không chính xác những gì bạn nghĩ rằng nó nên/hy vọng nó sẽ làm gì sau khi một cái gì đó BOM một loạt các tập tin xml của bạn. – pettys

2

chỉ cần thêm này trong tập tin XSLT của bạn:

<xsl:output method="text" 
     encoding="ASCII"/> 
1

Di chuyển biểu tượng BOM từ chuỗi với XSLT là khá đơn giản:

<xsl:value-of select="translate(StringWithBOM,'','')"/>

Các vấn đề liên quan