Langsung ke konten

Alat teks yang tidak pernah menyimpan teks Anda

Sebelas alat untuk menghitung, membandingkan, merapikan, dan membaca teks. Draf, daftar, dan kode sumber tidak pernah disimpan.

11 alat, tanpa daftar, tanpa watermark

Hitung Kata dan Hitung Karakter menjawab “seberapa panjang ini”, Bandingkan Teks menjawab “apa yang berubah”, dan Hapus Baris Duplikat merapikan daftar. Penampil untuk file kiriman orang yang tidak mau terbuka dengan benar, dan ketiga minifier untuk kode yang akan dirilis ke production. Catatan di bawah daftar ini menjelaskan mengapa dua alat bisa menghitung teks yang sama secara berbeda, dan mengapa dua baris yang tampak identik terkadang sama sekali bukan baris yang sama.

Hitung & Bandingkan

3 alat

Hitung kata dan karakter dengan benar dalam bahasa apa pun, dan lihat persis apa yang berubah di antara dua versi.

Penampil

3 alat

Baca CSV, file XML, atau dokumen Markdown dengan benar, tanpa diacak-acak spreadsheet terlebih dahulu.

Apa sebenarnya teks itu, dan mengapa alat-alat berbeda pendapat tentangnya

File teks adalah byte ditambah encoding, dan encoding-nya tidak disimpan di dalam file. Hanya konvensi yang memberi tahu program bahwa byte tertentu berarti “é” — itulah sebabnya file yang sama terbuka dengan benar di satu tempat dan menjadi “é” di tempat lain. UTF-8 adalah jawaban modern dan menyimpan huruf Latin umum dalam satu byte, huruf beraksen dalam dua, serta sebagian besar aksara Tionghoa, Jepang, Arab, dan semua emoji dalam tiga atau empat. UTF-16 dipakai secara internal oleh Windows dan JavaScript, dan menyimpan hampir semuanya dalam dua byte dan sisanya dalam empat. Windows-1252 dan Latin-1 adalah encoding satu byte yang masih dihasilkan sistem lama, dan keduanya sumber umum mojibake. Yang perlu diketahui tentang halaman-halaman ini: Penampil CSV mendeteksi encoding file yang Anda letakkan, termasuk UTF-16 dan Windows-1252, dan memungkinkan Anda menggantinya. Kotak teks biasa tidak — file yang diletakkan dibaca sebagai UTF-8, jadi ekspor Latin-1 akan menampilkan huruf beraksennya dengan salah, dan solusinya adalah mengonversinya terlebih dahulu.

“Karakter” punya empat arti, dan yang Anda butuhkan bergantung pada siapa yang membatasi. Apa yang dilihat orang sebagai satu karakter adalah grapheme cluster. Apa yang dicocokkan regular expression adalah code point. Apa yang dilaporkan string.length di JavaScript adalah unit UTF-16. Apa yang diukur kolom database atau header HTTP adalah byte UTF-8. Untuk teks bahasa Inggris biasa keempatnya sama, itulah sebabnya tidak ada yang sadar — lalu emoji keluarga ternyata satu grapheme, tujuh code point, sebelas unit UTF-16, dan dua puluh lima byte, dan pesan 200 karakter ditolak oleh kolom berkapasitas 255 karakter. Hitung Karakter menampilkan keempatnya justru karena alasan ini.

Karakter tak terlihat tetaplah karakter. Non-breaking space terlihat persis seperti spasi tetapi merupakan karakter yang sama sekali berbeda — karakter ini terus-menerus terbawa dalam teks yang disalin dari halaman web atau pengolah kata, dan merusak pencarian, parsing CSV, serta kode yang memisahkan teks berdasarkan spasi. Zero-width joiner adalah yang menyatukan emoji berisi beberapa orang. Soft hyphen, tanda arah, dan byte-order mark semuanya ikut terbawa bersama teks yang ditempel. Tak satu pun muncul di layar, jadi satu-satunya tanda yang Anda dapat adalah hitungan yang tidak cocok dengan apa yang terlihat — dan itulah salah satu kegunaan jujur penghitung karakter. Perlu dicatat, opsi abaikan spasi di Bandingkan Teks meringkas spasi dan tab biasa; opsi itu tidak menganggap non-breaking space sebagai spasi, karena keduanya memang bukan hal yang sama.

Akhir baris adalah alasan diff kadang menampilkan setiap baris sebagai berubah. Windows mengakhiri baris dengan carriage return dan line feed; sistem lain hanya memakai line feed. Simpan file LF dari editor Windows dan setiap barisnya kini berbeda satu byte tak terlihat, sehingga perbandingan tingkat byte — git diff, diff(1) — melaporkan seluruh file sebagai ditulis ulang dan menyembunyikan satu perubahan yang sebenarnya Anda buat. Bandingkan Teks dan Hapus Baris Duplikat kami memisahkan baris berdasarkan ketiga konvensi sebelum membandingkan, jadi file yang hanya berubah akhir barisnya tidak muncul di sini sebagai dinding merah. Itu kemudahan di alat untuk membaca, tetapi jebakan di repositori: perbaiki dari sumbernya dengan editor Anda atau dengan pengaturan akhir baris milik git sendiri.

Dua string yang tampak identik bisa dianggap berbeda, dan normalisasi biasanya penyebabnya. Unicode bisa menulis “é” dengan dua cara: sebagai satu code point, atau sebagai “e” biasa diikuti tanda aksen akut penggabung. Tampilannya sama tetapi urutan byte-nya berbeda, sehingga perbandingan, penghapusan duplikat, atau pencarian di database memperlakukannya sebagai dua nilai berbeda. macOS dan Windows sejak dulu berbeda pendapat soal bentuk mana yang dipakai untuk nama file, dan begitulah daftar yang dikumpulkan dari dua komputer berakhir dengan entri yang tampak seperti duplikat persis tetapi tidak bisa dihapus duplikatnya. Hitung Karakter adalah cara Anda menemukannya — kedua bentuk punya jumlah grapheme yang sama dan jumlah code point yang berbeda. Tidak ada alat di sini yang mengonversi antarbentuk; itu tugas satu baris untuk skrip dengan library Unicode, seperti unicodedata.normalize di Python.

“Jumlah kata” adalah penilaian, bukan pengukuran. Memisahkan berdasarkan spasi adalah aturan bahasa Inggris, dan menerapkannya pada bahasa Tionghoa, Jepang, atau Thai — yang tidak memberi spasi di antara kata — membuat artikel panjang dilaporkan sebagai satu kata. Penghitung kami memakai segmentasi kata Unicode milik browser, yang tahu di mana kata dimulai dalam setiap aksara. Perbedaan yang tersisa menyangkut tanda hubung (“well-known” dihitung satu kata di sini dan di Word, dua di beberapa alat), angka yang berdiri sendiri, dan apa yang dihitung sebagai kalimat — “We met Dr. Smith” adalah satu kalimat, sedangkan pemisah yang naif menghitungnya dua. Waktu baca adalah perkiraan tambahan di atasnya: 238 kata per menit untuk membaca dalam hati, berdasarkan meta-analisis, bukan angka bulat yang disalin dari satu blog ke blog lain.

Kapan browser memang bukan alat yang tepat

Tidak ada apa pun di modul ini yang dikirim atau disimpan, dan itulah yang membuatnya aman untuk menempel draf yang belum terbit atau kode sumber milik perusahaan. Hal itu juga menentukan batasnya, dan kami lebih baik menyebutkan di mana batasnya daripada Anda mengetahuinya di tengah pekerjaan.

File besar. Seluruh teks disimpan di memori tab dan diperiksa ulang saat Anda mengetik. Beberapa megabyte masih nyaman; file log ratusan megabyte tidak, dan ponsel menyerah lebih cepat daripada laptop. Command line tidak punya masalah ini karena memproses secara streaming: grep dan ripgrep mencari di file yang lebih besar dari memori Anda, sed dan awk mengubahnya baris demi baris, dan sort dengan flag unique menghapus duplikat dari daftar puluhan juta baris dengan memakai disk. Semuanya gratis dan sudah terpasang di macOS dan Linux.

Dokumen yang sangat berbeda. Bandingkan Teks berhenti di 8.000 perbedaan, karena lewat dari itu kebutuhan memori algoritmanya naik cukup cepat untuk membekukan tab, dan diff sebesar itu toh tidak terbaca. Dua versi dari dokumen yang sama hampir tidak pernah mencapainya; dua dokumen yang tidak berhubungan langsung mencapainya. Untuk meninjau kode, diff dan git diff menangani ukuran berapa pun, dan alat three-way merge yang layak melakukan sesuatu yang sama sekali tidak bisa dilakukan halaman ini.

Mengubah encoding atau menormalisasi Unicode. Halaman-halaman ini membaca dan melaporkan; halaman ini tidak mengonversi antar-encoding. iconv mengonversi antara semua encoding yang ada, perintah file menebak encoding yang Anda punya, dan normalisasi Unicode cukup satu baris Python atau panggilan ke uconv milik ICU. Jika Anda sedang memperbaiki ekspor yang kena mojibake, itulah rangkaian alatnya.

Apa pun yang berulang. Alat-alat ini berjalan saat seseorang mengeklik. Menghitung kata di empat ratus dokumen, atau me-minify sebuah direktori di setiap commit, adalah tugas skrip atau langkah build — dan khusus untuk minify, build tool Anda melakukan minify yang sama, dengan source map, watch mode, dan caching yang tidak bisa ditawarkan kotak tempel. Halaman ini untuk satu file yang ada di depan Anda.

CSS modern. Minify CSS menolak native nesting dan sintaks media range modern alih-alih me-minify-nya, karena minifier di baliknya lebih tua dari keduanya dan diam-diam menghapus apa yang tidak dipahaminya. Itu penolakan yang jujur, bukan fitur, dan solusinya adalah mengompilasi nesting-nya terlebih dahulu dengan Sass, PostCSS, atau Lightning CSS — yang hampir pasti sudah dilakukan build tool Anda.

Memilih di antara alat yang namanya mirip

Hitung Kata vs Hitung Karakter. Penghitungan yang sama dengan angka utama yang berbeda. Hitung Kata menonjolkan kata, kalimat, paragraf, dan waktu baca, yaitu ukuran untuk esai, artikel, atau pidato. Hitung Karakter menonjolkan karakter, karakter tanpa spasi, dan byte UTF-8, yaitu ukuran untuk meta description, segmen SMS, atau kolom database. Jika ada yang menolak teks Anda karena terlalu panjang, yang Anda butuhkan adalah penghitung karakter, khususnya jumlah byte-nya.

Bandingkan Teks vs Hapus Baris Duplikat. Bandingkan menjawab “apa yang berubah di antara dua versi ini” dan membutuhkan dua teks. Penghapus duplikat bekerja pada satu daftar dan menjawab “apa yang muncul lebih dari sekali di sini”, dan alat ini juga bisa memberi tahu entri mana yang berulang dan berapa kali, mengurutkan secara alami sehingga item2 muncul sebelum item10, atau hanya menyimpan baris yang muncul tepat sekali. Menemukan entri yang hanya ada di salah satu dari dua daftar adalah tugas penghapus duplikat, bukan tugas pembanding.

Minify HTML vs Minify CSS vs Minify JavaScript. Tiga bahasa, tiga minifier, dan satu tumpang-tindih yang perlu diketahui: minifier HTML juga me-minify CSS di dalam blok style dan JavaScript di dalam blok script, dengan cara yang sama seperti dua halaman lainnya. Jadi satu file HTML cukup butuh satu alat, bukan tiga. File .css dan .js yang terpisah butuh halamannya masing-masing.

Penampil XML vs Formatter XML dan Validator XML. Penampil di sini memberi Anda pohon yang bisa diciutkan untuk ditelusuri, dan itulah yang Anda perlukan saat dokumennya besar dan Anda sedang mencari sesuatu. Formatter dan validator, di alat developer, memberi Anda teks berindentasi untuk ditempel kembali ke file, serta baris dan kolom persis tempat dokumen rusak. Membaca, versus mengedit dan memperbaiki.

Penampil CSV vs membuka file di Excel. Bukan alat pesaing, tetapi inilah perbandingan yang sebenarnya dilakukan orang. Excel mengonversi saat membuka tanpa bertanya: kode produk 00123 menjadi 123, nomor komponen 5-3 menjadi 5 Maret, nomor pesanan yang panjang menjadi notasi ilmiah, dan ekspor dari sistem Jerman yang dipisahkan titik koma masuk seluruhnya ke kolom A. Penampil menampilkan setiap nilai sebagai teks, persis seperti yang tersimpan, sehingga Anda bisa melihat apa yang sebenarnya dikirimkan kepada Anda.

Pratinjau Markdown vs Markdown ke PDF. Pratinjau untuk memeriksa bahwa README ditampilkan seperti yang akan ditampilkan GitHub, langsung saat Anda mengetik. Markdown ke PDF, di alat dokumen, untuk menghasilkan dokumen jadi dengan pemisah halaman. Periksa di sini, terbitkan di sana.

Dasar yang dipakai alat-alat ini

Mesin open-source yang melakukan pekerjaan sebenarnya, dan spesifikasi yang diterapkannya.

  • Unicode Annex #15Specification — menjelaskan normalisasi — mengapa dua string yang tampak identik bisa berbeda.
  • Unicode Annex #29Specification — mendefinisikan grapheme cluster, yang merupakan arti sebenarnya dari “satu karakter”.
  • cssoMIT — melakukan minify CSS.
  • TerserBSD-2-Clause — melakukan minify JavaScript.
  • markdown-itMIT — merender pratinjau Markdown.

Pertanyaan yang sering diajukan

Apakah teks saya disimpan di suatu tempat?

Tidak. Tidak ada yang disimpan, tidak ada yang dicatat, dan tidak ada permintaan yang dikirim. Putus koneksi internet setelah halaman dimuat dan semuanya tetap berfungsi. Untuk teks, hal ini lebih penting daripada kedengarannya: yang ditempel orang ke penghitung dan pembanding online adalah tulisan yang belum terbit, draf dokumen hukum, tugas pelajar, dan kode sumber milik perusahaan.

Mengapa jumlah kata saya berbeda dari Microsoft Word atau situs lain?

Karena menghitung melibatkan pilihan. Kata bertanda hubung, angka yang berdiri sendiri, apa yang mengakhiri kalimat, dan apa yang memisahkan paragraf semuanya adalah keputusan, dan setiap alat memutuskannya secara berbeda. Alat kami menghitung “well-known” sebagai satu kata, menganggap baris kosong — bukan setiap pergantian baris — sebagai batas paragraf, dan tidak memisahkan kalimat setelah singkatan seperti “Dr.” — serta memakai segmentasi kata Unicode, sehingga bahasa Tionghoa dan Jepang dihitung dengan benar, bukan dilaporkan sebagai satu kata raksasa. Untuk tulisan biasa, angkanya hampir sama; untuk daftar nomor komponen, tidak.

Mengapa file yang saya letakkan menampilkan “é” alih-alih “é”?

Karena file itu bukan UTF-8. Kotak teks membaca file yang diletakkan sebagai UTF-8, yang mencakup hampir semua file yang dibuat abad ini, tetapi ekspor lama bisa berupa Windows-1252 atau Latin-1, dan byte-nya berarti hal yang berbeda. Mengonversinya sekali dengan iconv memperbaikinya secara permanen. Penampil CSV adalah pengecualian di antara alat-alat ini — alat itu mendeteksi encoding-nya, dan memungkinkan Anda menggantinya jika deteksinya salah.

Mengapa masih ada duplikat setelah saya menghapus duplikat?

Hampir selalu karena spasi di akhir baris, yang tidak terlihat dan membuat dua baris benar-benar berbeda. Karena itu, pemangkasan spasi sebelum membandingkan aktif secara bawaan, dan hanya memengaruhi perbandingannya — baris yang dipertahankan tetap memakai teks aslinya. Penyebab lainnya adalah Unicode: huruf beraksen yang ditulis sebagai satu karakter dan sebagai huruf plus aksen penggabung tampak identik tetapi tidak sama. Tidak ada alat di sini yang menormalisasinya untuk Anda.

Apakah alat ini bisa dipakai untuk dokumen Word, PDF, atau spreadsheet?

Tidak secara langsung — alat-alat ini bekerja pada teks, dan itulah yang membuatnya instan. Konversi dulu: alat [PDF ke Teks](pdf-to-text) dan [DOCX ke TXT](docx-to-txt) kami melakukan persis itu, dan hasilnya bisa langsung ditempel di sini. CSV adalah pengecualian dan langsung terbuka di Penampil CSV.

Apakah ada batas ukuran atau batas harian?

Tidak ada akun, tidak ada kuota, dan tidak ada batas harian, karena tidak ada server yang menghitung. Batasnya adalah memori perangkat Anda. Satu-satunya batas eksplisit ada di Bandingkan Teks, yang berhenti di 8.000 perbedaan dan memberitahukannya alih-alih membekukan tab — membandingkan dua versi dari dokumen yang sama hampir tidak pernah mendekati batas itu.