Những lý do kỹ thuật tồn tại cho việc không sử dụng các ký tự khoảng trắng trong tên tệp?


75

Một số người mà tôi biết đã bày tỏ sự cáu kỉnh ngày nay đối với những người trong chúng ta có xu hướng không sử dụng khoảng trắng trong tên tệp của mình, ví dụ NamingThingsLikeThis.txt- mặc dù hầu hết các hệ điều hành hiện đại hỗ trợ không gian trong tên tệp.

lý do kỹ thuật nào mà vẫn thấy phổ biến tên tệp không có khoảng trắng (thích hợp) không? Nếu vậy, những lý do kỹ thuật nào mà không gian trong tên tệp được tránh hoặc không được khuyến khích, và trong trường hợp nào chúng có liên quan?

Lý do rõ ràng nhất mà tôi có thể nghĩ ra, và tại sao tôi thường tránh nó, là các trích dẫn thêm được yêu cầu trên dòng lệnh khi xử lý các tệp như vậy. Có bất kỳ lý do kỹ thuật quan trọng khác?


Giống như bạn đã nói, chúng dễ dàng hơn rất nhiều để xử lý trên dòng lệnh. Và đối với lập trình là tôi không chắc việc sử dụng khoảng trắng trong tên tệp có khả thi hay không khả thi hay không.
Alvin Row

Câu trả lời:


66

Các ký tự khoảng trắng trong tên tệp có thể là một nỗi đau hoàng gia đúng trong câu tục ngữ trong nhiều bối cảnh trên dòng lệnh và trong các kịch bản, trong đó bạn phải cẩn thận để đảm bảo chúng được thoát đúng cách để không trông giống như các dấu phân cách cho các lệnh bạn đang có đang chạy.

Sẽ an toàn hơn nếu không có chúng ở đó, ngay cả khi bạn chắc chắn rằng tệp / dir / what-ever sẽ không bao giờ được sử dụng trong bối cảnh như vậy.

Điều đó, và thói quen cũ chết cứng.


Họ cũng là một nỗi đau hoàng gia đúng đắn để giải quyết sau đó bạn phải soạn thảo các đường dẫn và sửa đổi chúng. Đảm bảo rằng các thành phần không được trích dẫn và không được sửa đổi trước khi thoát / trích dẫn lại, đặc biệt là nếu các phần được gửi đến các bit mã khác để thao tác.
afrazier

2
Nếu bạn nghĩ rằng không gian là xấu, hãy thử xử lý các tệp có dòng mới ( '\n') trong tên của chúng. (Các hệ thống giống như Unix thực sự cho phép điều này; Windows nói chung, hoặc ít nhất là gây khó khăn.)
Keith Thompson

31

Ngoài các câu trả lời khác về dòng lệnh và thói quen cũ, cũng có nhiều giao thức mạng cần được chăm sóc đặc biệt khi xử lý tên tệp chứa khoảng trắng.

(Nếu bạn đã từng thử tải xuống "Danh sách sản phẩm.pdf" từ một trang web và kết thúc bằng một tệp có tên là "Sản phẩm", bạn đã bị cắn bởi điều này, bởi vì lập trình viên ở đầu bên kia không biết hoặc không thể 'tìm ra các quy tắc trích dẫn cho tiêu đề Xử lý nội dung http.)


11
+1. HTTP để bắt đầu. Không gian trong URL (đối với bất kỳ giao thức nào, không chỉ HTTP) nên được thoát ra% 20 hoặc +. Nhầm lẫn có thể phát sinh khi chúng không được mã hóa như mong muốn. Đối với các trang web có một lý do trực quan để tránh cả dấu cách và dấu gạch dưới ("_") thường được sử dụng để thay thế chúng - cả hai có thể trông giống nhau trong một liên kết được gạch chân, vì vậy ai đó sao chép liên kết bằng tay hoặc đọc nó cho ai đó có thể nhận được nó sai rồi.
David Spillett

5
Một trong những điều khó chịu nhất về các không gian cần được mã hóa trong URL là xu hướng một số phần mềm nhất định sẽ kết thúc việc giữ các không gian được mã hóa ...
SamB

Đây có phải là thật không? Năm 2018 điều này xảy ra?
Chris Calo

@ChrisCalo Bạn có thể nhận thấy rằng câu trả lời này đã được đưa ra vào năm 2009, không phải năm 2018. Nhưng, vâng, điều này vẫn xảy ra vào năm 2018. Có thể ít thường xuyên hơn, bây giờ hầu hết các nhà phát triển tân binh sử dụng khung để xây dựng trang web thay vì làm mọi thứ từ đầu, nhưng nó vẫn còn một vấn đề.
Stobor

28

Rất nhiều lý do là lịch sử. Điều đó không có nghĩa là họ không có ý nghĩa ngày hôm nay.

Các vấn đề về tính di động

Khi đặt tên một tệp, bạn cũng có thể phải xem xét các hệ thống (tệp) khác sẽ xử lý tên tệp đó như thế nào. Một ký tự trong tên tệp có thể tốt cho hệ thống của bạn, nhưng nó có thể là vấn đề đối với hệ thống khác.

Vì vậy, miễn là có khả năng nhỏ nhất là bạn có thể muốn truy cập tệp dễ dàng từ một hệ thống cũ hơn, bạn chỉ chọn ký tự an toàn . Điều này có thể bao gồm việc khởi động vào một hệ thống khôi phục cũ mà bạn giữ xung quanh hoặc lo ngại rằng các phiên bản Windows gần đây vẫn bằng cách nào đó dựa trên MS-DOS.

Chiều dài

Một hệ thống tệp có thể giới hạn độ dài mà tệp có thể có. Điều này thậm chí còn nghiêm trọng hơn trong những ngày mà MS-DOS bị giới hạn ở tên tệp 8.3 . Vì vậy, bỏ không gian cho phép bạn đặt các ký tự có ý nghĩa hơn vào tên.

Một số hệ thống tệp khác cũng xác định giới hạn nghiêm ngặt về độ dài tên tệp của chúng. Wikipedia có một bảng trong bài viết về so sánh hệ thống tệp cho những người muốn biết chi tiết.

Nhân vật dành riêng

MS-DOS cũng định nghĩa ký tự không gian là ký tự dành riêng. Điều này là do thực tế là ký tự không gian đã được sử dụng để đệm trong FAT . Ngoài ra, MS-DOS không cung cấp hệ thống thoát hiểm trong hệ vỏ.

Giải thích dòng lệnh

Hầu hết các dòng lệnh tôi biết sử dụng ký tự khoảng trắng làm dấu phân cách tham số . Khi bỏ qua việc thoát đúng tên tệp, nó có thể gây ra hậu quả nghiêm trọng vì các phần của tên tệp có thể được hiểu là tham số cho ứng dụng bạn muốn gọi.

Xem xét sự khác biệt giữa

rm foo bar

rm "foo bar"

Bài viết WikiPedia được liên kết ở trên thậm chí chỉ ra sự mơ hồ được giới thiệu bằng cách mất tích để thoát đúng lệnh:

Sự mơ hồ có thể được ngăn chặn bằng cách cấm các không gian được nhúng trong tên tệp và thư mục ở vị trí đầu tiên (ví dụ: bằng cách thay thế chúng bằng dấu gạch dưới '_') hoặc, nếu được hỗ trợ bởi trình thông dịch dòng lệnh và các chương trình lấy các tham số này như đối số, bằng cách đặt tên có khoảng trắng được nhúng giữa các ký tự trích dẫn hoặc sử dụng ký tự thoát trước khoảng trắng, thường là dấu gạch chéo ngược ('\'). Ví dụ

Long path/Long program name Parameter one Parameter two ...

là mơ hồ (là "tên chương trình" một phần của tên chương trình, hoặc hai tham số?); Tuy nhiên

Long_path/Long_program_name Parameter_one Parameter_two ...,
LongPath/LongProgramName ParameterOne ParameterTwo ...,
"Long path/Long program name" "Parameter one" "Parameter two" ...

và Long \ path / Long \ chương trình \ name Parameter \ one Parameter \ hai ...

không mơ hồ.

Bộ định vị tài nguyên thống nhất (URL)

Khi cố gắng mô tả vị trí của tệp, sử dụng URL, khoảng trống cần phải được thoát.

Nhân vật có thể không an toàn vì một số lý do. Ký tự khoảng trắng không an toàn vì các khoảng trắng đáng kể có thể biến mất và các khoảng trắng không đáng kể có thể được đưa vào khi URL được sao chép hoặc sắp chữ hoặc chịu sự điều trị của các chương trình xử lý văn bản.

Nguồn: RFC1738

Vì vậy, một không gian phải được thay thế bằng một %20thay thế. Điều này làm cho phần tên tệp của URL ít được đọc hơn và do đó, khiến mọi người tránh nó ngay từ đầu.


25

Các không gian được mã hóa hoặc chuyển đổi thành %20tên tệp trên web, điều này có thể khiến việc quản lý tài sản của trang web trở nên khó khăn hơn.

Image 1.pngImage%201.pngkhó hiểu. Nó dễ sử dụng hơn Image001.pngthay thế.

Điều này thực sự thuộc cùng loại với trình tự thoát cho dòng lệnh.


5

Đôi khi, không gian có thể gây ra sự cố khi xử lý dòng lệnh hoặc khi sử dụng các hệ điều hành cũ hơn hoặc khi viết chương trình sẽ được biên dịch trên các hệ điều hành khác nhau hoặc khi ... có nhiều lý do có thể gây ra sự cố và tôi không ' Tôi thực sự cảm thấy thật rắc rối khi viết tệp như: file-without-blanks.txt hoặc file_without_blanks.txt . Tôi thích dask vì dấu gạch dưới đôi khi có thể trở nên vô hình khi xử lý, ví dụ, phông chữ được gạch chân.

Nhưng chủ yếu, đó là vấn đề của thói quen từ tuổi già. Mà tôi không cảm thấy có đủ lý do chuyên nghiệp để từ bỏ.


Một ghi chú bổ sung, có thể không liên quan, nhưng tuy nhiên tôi sẽ đặt nó ở đây. Những người đặt tên tệp của họ bằng dấu cách thường không nghĩ nhiều về điều đó; những người thường không biết một chút lý do tại sao nên tránh họ trong tên tập tin.
Và, tất cả chúng ta đều có thể đồng ý, không có gì tệ hơn một tập tin có tên "Thưa ông hoặc bà, tôi đang viết cho bạn lá thư này để thông báo cho bạn về yo.doc".

Không chỉ là khoảng trắng - độ dài tệp cũng được tính cho một cái gì đó và IMHO, nó không nên dài hơn, giả sử, 30 ký tự. Đối với các tên tệp dài có khoảng trắng bên trong cũng là một điều may mắn khi ghi đĩa CD, DVD và những thứ cần được đọc trong các hệ điều hành cũ hơn và ở giữa các bản đồ Win và * nix.


2
Người dùng Word lười biếng ...
SamB
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.