Kesalahan dalam file strings.xml di Android

114

Saya telah mendeklarasikan string panjang dalam string.xmlsebuah aplikasi.

Dinyatakan seperti ini

<string name="terms">PLEASE READ THESE TERMS OF USE CAREFULLY  BY ACCESSING THIS .................</string>

Tetapi ini memberikan kesalahan berikut:

error: Apostrophe not preceded by \ (in PLEASE READ THESE TERMS OF USE CAREFULLY
Subrat
sumber
1
kesalahannya, karena terlalu banyak titik dalam string. `error: Apostrophe tidak didahului oleh` adalah pesan tiruan, masalahnya ada di titik. Seingat saya, setelah lebih dari tiga titik Anda bisa mendapatkan kesalahan.
Bunglon

Jawaban:

293

posting string lengkap Anda. Padahal, tebakan saya adalah ada karakter apostrof (') dalam string Anda. ganti dengan (\ ') dan itu akan memperbaiki masalah. sebagai contoh,

//strings.xml
<string name="terms">
Hey Mr. Android, are you stuck?  Here, I\'ll clear a path for you.  
</string>

Ref:

http://www.mrexcel.com/forum/showthread.php?t=195353

https://code.google.com/archive/p/replicaisland/issues/48

Priyank
sumber
30
Mengapa tidak ada yang membicarakan tentang persyaratan bodoh ini bahwa kita melepaskan setiap apostrof dalam data string? Bahkan di dalam bagian CDATA!
Phil Kulak
2
@PhilKulak heh, cukup gila dengan bahasa Prancis misalnya. Kami akan mencari dan mengganti ftw.
Warpzit
4
@PhilKulak Di Android strings.xml, Anda dapat mengapit seluruh string dalam tipe lain dari kutipan penutup seperti <string name="good_example">"This'll work"</string> Referensi: developer.android.com/guide/topics/resources/…
situee
Ini dapat menyebabkan masalah ketika Anda memiliki banyak string dan menggunakan ganti semua. Lihat jawaban saya.
Dan Bray
26

Larutan

Apostrop di strings.xml harus ditulis sebagai

\'


Contoh

Dalam kasus saya, saya mengalami kesalahan dengan string ini di strings.xml saya dan saya memperbaikinya.

<item>Most arguments can be ended with three words, "I don\'t care".</item>

Di sini Anda melihat aplikasi saya dibangun dengan benar dengan kode itu.

masukkan deskripsi gambar di sini

Ini adalah string sebenarnya di aplikasi saya.

masukkan deskripsi gambar di sini

JGallardo
sumber
1
Konyolnya, karena saya menggunakan XML, saya menggunakan & apos ;, dan itu juga error.
Chris Westin
12

Anda harus meletakkan \ sebelum apostrof. Seperti ini \ ', Juga periksa apakah Anda sedang mengedit strings.xml dan bukan values.xml (android studio mengarahkan Anda ke file ini ketika menunjukkan kesalahan). Karena jika Anda mengedit values.xml dan mencoba mengompilasi lagi, kesalahan tetap ada. Ini terjadi pada saya baru-baru ini.

Walmac
sumber
1
Ha ha! Itu baru saja terjadi pada saya juga. Tanda kutip terus muncul kembali karena alasan itu. Membuatku gila.
DrMcCleod
10

https://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling

Mengganti apostrof dan tanda kutip

Jika Anda memiliki apostrof atau kutipan dalam string Anda, Anda harus meloloskannya atau mengapit seluruh string dalam tipe lain dari tanda kutip penutup. Misalnya, berikut beberapa sengatan yang berhasil dan tidak berhasil:

<string name="good_example">"This'll work"</string>
<string name="good_example_2">This\'ll also work</string>
<string name="bad_example">This doesn't work</string>
<string name="bad_example_2">XML encodings don&apos;t work</string>
situee
sumber
6

Gunakan regex ini (?<!\\)'untuk mencari apostrof yang tidak lolos. Ini menemukan apostrof yang tidak didahului oleh garis miring terbalik.

Elad Selesai
sumber
4

Saya menggunakan ibrani (bahasa RTL) di strings.xml. Saya telah mencari string.xml secara manual untuk karakter ini: 'daripada saya menambahkan karakter escape \ di depannya (sekarang terlihat seperti \') dan masih mendapatkan kesalahan yang sama!

Saya mencari lagi untuk karakter 'dan saya mengganti karakter' dengan \ '(tulisan eng), karena ini menunjukkan kanan ke kiri terlihat seperti itu' \ di strings.xml !!

Masalah terpecahkan.

Li3ro
sumber
@akauppi, Komentar ini lebih ditujukan untuk pengembang bahasa RTL, karena kami menemukan editor yang tidak dapat menangani RTL dengan baik, dengan menampilkan karakter dalam urutan yang salah di layar. mengetik dalam bahasa Ibrani yang panjang dalam xml dapat menjadi berantakan
Li3ro
Ah, Kanan-Ke-Kiri. Semuanya masuk akal sekarang. Terima kasih.
akauppi
3
Kami memecahkan apostrof Ibrani dengan
mengosongkan
2

Anda mungkin dapat menggunakan unicode yang setara dengan apostrof dan karakter lain yang tidak didukung dalam string xml. Padanan Apostrof adalah "\ u0027".

Titik Foton
sumber
1

1. untuk kesalahan: tanda kutip tidak lolos dalam string

apa yang saya temukan adalah bahwa alat AAPT2 menunjuk ke baris yang salah di xml, kadang-kadang. Jadi Anda harus memperbaiki seluruh file strings.xml

Di Android Studio, dalam penggunaan file masalah:

Edit-> temukan-> ganti

Kemudian tulis di bidang pertama \ '(atau \ &,>, \ <, \ ")
di tempat kedua' (atau &,>, <,")
lalu ganti masing-masing jika perlu. (Atau "reptlace all" in case dengan ' )
Kemudian di kolom pertama masukkan lagi '(atau &,>, <, ")
dan di kolom kedua tulis \'
lalu ganti masing-masing jika diperlukan. (Atau" ganti semua "dengan ')

2. untuk simbol bermasalah lainnya yang
saya gunakan untuk mengomentari setiap setengah bagian berikutnya + membangun kembali sampai saya tidak menemukan tanda yang salah.

Misalnya, kata yang diloloskan "\ update" tiba-tiba menjatuhkan kesalahan seperti itu :)

CodeToLife
sumber
1

Jawaban terbaik dari hanya melarikan diri 'dengan \'karya-karya tapi aku tidak suka solusi karena ketika menggunakan mengganti semua dengan 'untuk \', hanya bekerja sekali. Kedua kalinya Anda akan pergi \\'.

Oleh karena itu, gunakan: \u0027.

Dan Bray
sumber