Lỗi trong tệp string.xml trong Android


114

Tôi đã khai báo một chuỗi dài trong string.xmlmột ứng dụng.

Tuyên bố như thế này

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

Nhưng điều này gây ra lỗi sau:

error: Apostrophe not preceded by \ (in PLEASE READ THESE TERMS OF USE CAREFULLY

1
là do quá nhiều dấu chấm trong chuỗi. `error: Apostrophe không đứng trước` là một thông báo giả, vấn đề nằm ở dấu chấm. Theo tôi nhớ, sau hơn ba chấm, bạn có thể gặp lỗi.
Dudeist

Câu trả lời:


293

đăng chuỗi hoàn chỉnh của bạn. Mặc dù vậy, tôi đoán là có một ký tự dấu nháy đơn (') trong chuỗi của bạn. thay thế nó bằng (\ ') và nó sẽ khắc phục sự cố. ví dụ,

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

Tham khảo:

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

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


30
Tại sao không ai nói về yêu cầu ngu ngốc này là chúng ta phải thoát khỏi mọi dấu nháy đơn trong dữ liệu chuỗi? Ngay cả trong các phần CDATA!
Phil Kulak

2
@PhilKulak heh, với tiếng Pháp thì khá là điên rồ. Chúng tôi sẽ tìm kiếm và thay thế ftw.
Warpzit

4
@PhilKulak Trong Android string.xml, bạn có thể đặt toàn bộ chuỗi trong một loại dấu ngoặc kép khác như <string name="good_example">"This'll work"</string> Tham khảo: developer.android.com/guide/topics/resources/…
situee

Điều này có thể gây ra sự cố khi bạn có nhiều dây và sử dụng thay thế tất cả. Hãy xem câu trả lời của tôi.
Dan Bray

26

Giải pháp

Dấu nháy đơn trong string.xml phải được viết là

\'


Thí dụ

Trong trường hợp của tôi, tôi đã gặp lỗi với chuỗi này trong string.xml và tôi đã sửa nó.

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

Ở đây, bạn thấy ứng dụng của tôi được xây dựng đúng cách với mã đó.

nhập mô tả hình ảnh ở đây

Đây là chuỗi thực tế trong ứng dụng của tôi.

nhập mô tả hình ảnh ở đây


1
Thật ngớ ngẩn, vì tôi đang sử dụng XML nên tôi đang sử dụng & apos ;, và đó cũng là một lỗi.
Chris Westin

12

Bạn phải đặt \ trước dấu nháy đơn. Giống như điều này \ ', Đồng thời, hãy kiểm tra xem bạn đang chỉnh sửa string.xml chứ không phải là values.xml (android studio hướng bạn đến tệp này khi hiển thị lỗi). Bởi vì nếu bạn chỉnh sửa giá trị.xml và cố gắng biên dịch lại, lỗi vẫn còn. Điều này đã xảy ra với tôi gần đây.


1
Haha! Điều đó cũng xảy ra với tôi. Dấu nháy đơn liên tục xuất hiện trở lại chính xác là vì lý do đó. Đã khiến tôi phát điên.
DrMcCleod

10

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

Thoát dấu nháy đơn và dấu ngoặc kép

Nếu bạn có một dấu nháy đơn hoặc một dấu ngoặc kép trong chuỗi của mình, bạn phải thoát khỏi nó hoặc đặt toàn bộ chuỗi trong một loại dấu ngoặc kép khác. Ví dụ, đây là một số vết đốt có tác dụng và không hoạt động:

<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>

6

Sử dụng regex này (?<!\\)'để tìm kiếm dấu nháy đơn không thoát. Nó tìm thấy một dấu nháy đơn không đứng trước dấu gạch chéo ngược.


4

Tôi sử dụng tiếng Do Thái (ngôn ngữ RTL) trong string.xml. Tôi đã tìm kiếm trong string.xml theo cách thủ công cho char này: 'sau khi tôi thêm Escape char \ infront của nó (bây giờ nó trông giống như \') và vẫn gặp lỗi tương tự!

Tôi đã tìm kiếm lại char 'và tôi đã thay thế char' bằng \ '(viết bằng tiếng Anh), vì nó hiển thị từ phải sang trái, nó giống như thế' \ trong string.xml !!

Vấn đề đã được giải quyết.


@akauppi, Nhận xét này dành cho các nhà phát triển ngôn ngữ RTL nhiều hơn, vì chúng tôi gặp phải các trình chỉnh sửa không thể xử lý RTL tốt, bằng cách hiển thị các ký tự không đúng thứ tự trên màn hình. nhập các
sentenses

À, từ phải sang trái. Điều này thật ý nghĩa ngay lúc này. Cảm ơn.
akauppi

3
Chúng tôi giải quyết cho dấu nháy Hebrew bởi thoát trên cả hai mặt: \ '\
Radley

2

Bạn có thể sử dụng unicode tương đương với cả dấu nháy đơn và các ký tự khác không được hỗ trợ trong chuỗi xml. Tương đương của Apostrophe là "\ u0027".


1

1. đối với lỗi: dấu nháy đơn không thoát trong chuỗi

những gì tôi tìm thấy là công cụ AAPT2 chỉ đến hàng sai trong xml, đôi khi. Vì vậy, bạn nên sửa toàn bộ tệp string.xml

Trong Android Studio, khi sử dụng tệp có vấn đề:

Chỉnh sửa-> tìm-> thay thế

Sau đó viết vào trường đầu tiên \ '(hoặc \ &,>, \ <, \ ")
trong trường thứ hai' (hoặc &,>, <,")
sau đó thay thế từng ô nếu cần. (Hoặc "thay thế tất cả" trong trường hợp bằng ' )
Sau đó, trong trường đầu tiên lại đặt '(hoặc &,>, <, ")
và trong trường thứ hai viết \'
rồi thay thế từng cái nếu cần. (Hoặc" thay thế tất cả "trong trường hợp bằng ')

2. đối với các biểu tượng có vấn đề khác,
tôi sử dụng để nhận xét từng nửa phần tiếp theo + xây dựng lại cho đến khi tôi không tìm thấy dấu hiệu sai.

Ví dụ: một từ thoát "\ update" bất ngờ bị lỗi như vậy :)


1

Câu trả lời tốt nhất của việc chỉ đơn giản là thoát 'với \'các công trình nhưng tôi không thích giải pháp này vì khi sử dụng thay thế tất cả bằng 'to \', nó chỉ hoạt động một lần. Lần thứ hai bạn sẽ bị bỏ lại với \\'.

Vì vậy, sử dụng: \u0027.

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.