2011-03-02 44 views
5

Làm thế nào chúng ta có thể thay thế các biểu tượng từ chuỗi trong C#?Thay thế các ký hiệu từ chuỗi trong C#

Như thế này

Input: "�Click me."

Output: "Click me.";

+7

Bạn nhận được những biểu tượng như vậy ngay từ đầu? Có vẻ như bạn đã mã hóa mã độc. Thay thế không phải là một giải pháp. Giải quyết vấn đề ở gốc rễ của nó đó là: sửa chữa cách bạn đang nhận được chuỗi này và không cố gắng hồi sinh một điều đã chết. –

+0

Trông giống như [vấn đề mã hóa/mã hóa] (http://www.joelonsoftware.com/articles/Unicode.html). –

+0

Bạn chỉ đang cố xóa mọi thứ trừ chữ và số và dấu chấm câu? –

Trả lời

7

Một giải pháp đơn giản là loại bỏ tất cả các ký tự không phải ASCII khỏi chuỗi của bạn. Có một vài cách để làm điều này có sẵn trên this question, đơn giản nhất trong số đó có lẽ sẽ là:

string s = "�Click me."; 
s = Regex.Replace(s, @"[^\u0000-\u007F]", ""); 

Mặc dù như đã đề cập, điều này có thể là một vấn đề mã hóa/bảng mã - sử dụng một regex ở đây có thể không nhất thiết phải giải pháp thích hợp.

EDIT: Dựa trên ý kiến ​​của bạn, đây là một vài mô hình khác mà bạn có thể thử:

Hủy bỏ tất cả các ký tự ASCII và ký tự điều khiển ASCII:

s = Regex.Replace(s, @"[^\u0020-\u007F]", ""); 

Hủy bỏ tất cả mọi thứ trừ chữ và số Các ký tự ASCII:

s = Regex.Replace(s, @"[^A-Za-z0-9]", ""); 
+0

khi tôi thử viết xml sau khi thay thế các ký tự không phải ascii thì tôi vẫn nhận được lỗi này "giá trị thập lục phân 0x05 là ký tự không hợp lệ" – Novice

+0

@Novice '0x05' là ký tự điều khiển ASCII. Nếu bạn muốn loại bỏ chúng là tốt, bạn có thể sử dụng nó thay vì những gì được đăng trong câu trả lời của tôi: 's = Regex.Replace (s, @" [^ \ u0020- \ u007F] "," ");'. Bạn nhận được đầu vào từ đâu? – Donut

+0

Tôi nhận được đầu vào từ cơ sở dữ liệu mysql. Ký tự trường trong bảng là "utf_8" – Novice

2
var output = input.Replace("�",""); 

Mẫu!

+1

Vâng, nhưng ' ' là những gì bạn thấy trên màn hình, giá trị thực tế có lẽ là một cái gì đó khác để thay thế này sẽ không có khả năng làm nhiều. –

+0

Oh hoàn toàn, tôi chỉ trả lời câu hỏi trực tiếp - "Làm thế nào chúng ta có thể thay thế các biểu tượng từ chuỗi trong C#" – Jamiec

+0

@Darin Dimitrov: Nó chắc chắn sẽ loại bỏ suy nghĩ? Đó là một nhân vật * ở đâu đó * sau khi tất cả – Kurru

2

Bạn cũng có thể sử dụng tên khối unicode:

source = Regex.Replace(source , @"\p{name}", ""); 

Danh sách tên có thể được tìm thấy trong this article. Tôi không chắc chắn về nhân vật của bạn.

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