banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix [?] Lỗi khi sử dụng Gtk lib trên linux  XML
  [Programming]   [?] Lỗi khi sử dụng Gtk lib trên linux 16/03/2008 11:27:16 (+0700) | #1 | 119573
[Avatar]
freakmind
Member

[Minus]    0    [Plus]
Joined: 26/11/2007 02:53:23
Messages: 79
Offline
[Profile] [PM]
Trong topic đã lập khác về gtk, em thấy có vẻ không nhiều người quan tâm đến cái này . Thế nên sau mấy hôm tìm hiểu em cũng đã viết đc kha khá bằng gtk, tuy nhiên khi sử dụng thì có 1 lỗi như sau phát sinh:
Code:
(testgtk:2620): Gtk-CRITICAL **: gtk_text_buffer_emit_insert: assertion `g_utf8_validate (text, len, NULL)' failed


Lỗi này có khi em sử dụng 1 hộp entry để truyền text vào, sau đó xử lý text và in ra màn hình vào 1 hộp view text khác ( và khi xử lý em có thay đổi text truyền vào [ như biến chữ thường thành chữ hoa ] )

Em đã đảo 1 vòng qua google nhưng chỉ thấy đề cập đến chứ kô có cách giải quyết ( lỗi này có khi kô convert đc text từ unicode ).
Mong mọi người ai biết giúp đỡ, thx trước ! smilie
[Up] [Print Copy]
  [Question]   Re: [?] Lỗi khi sử dụng Gtk lib trên linux 16/03/2008 12:23:27 (+0700) | #2 | 119576
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
bạn đưa code mà bạn đã viết lên đây được không ?
[Up] [Print Copy]
  [Question]   Re: [?] Lỗi khi sử dụng Gtk lib trên linux 17/03/2008 04:13:28 (+0700) | #3 | 119652
[Avatar]
freakmind
Member

[Minus]    0    [Plus]
Joined: 26/11/2007 02:53:23
Messages: 79
Offline
[Profile] [PM]
Đây là code của mình
Code:

		


Tác dụng của nó là biến chữ thường thành chữ hoa thôi.
[Up] [Print Copy]
  [Question]   Re: [?] Lỗi khi sử dụng Gtk lib trên linux 17/03/2008 07:35:01 (+0700) | #4 | 119686
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
char *modifytext(char *text){
int i,length=strlen(text);
for(i=0;i<length;i++) {
text[i]=text[i]-32;
}
return text;


việc dịch đi 32 vị trí để chuyển chữ thường thành chữ hoa chỉ đúng khi kí tự chuyển đổi là ANSI thôi bạn, trong khi text mà bạn lấy ra được từ gtk_entry_get_text là chuối các char utf8. Mình nghĩ việc chuyển đổi này bạn nên tìm một thư viện sẵn có thì tốt hơn.
Thân
[Up] [Print Copy]
  [Question]   Re: [?] Lỗi khi sử dụng Gtk lib trên linux 17/03/2008 08:14:49 (+0700) | #5 | 119690
[Avatar]
freakmind
Member

[Minus]    0    [Plus]
Joined: 26/11/2007 02:53:23
Messages: 79
Offline
[Profile] [PM]
Mình search trên google cũng thấy nó bảo vậy, nhưng có hàm nào trong C chuyển từ unicode sang ANSI kô nhỉ smilie
Và ý bạn tìm các thư viện có sẵn tức là kô sử dụng stdio.h nữa mà sử dụng thư viện khác để thao tác với char??smilie
Thx đã rep smilie
[Up] [Print Copy]
  [Question]   Re: [?] Lỗi khi sử dụng Gtk lib trên linux 17/03/2008 08:54:13 (+0700) | #6 | 119693
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
ý mình là việc chuyển lower <--> upper case nên sử dụng thư viện có sẵn thay cho việc dịch chuyển 32 vị trí mà bạn đã làm đó, vì các kí tự có dấu (VN) thì việc convert không phải chỉ là dịch chuyển 32 vị trí để có được kí tự hoa đâu.
[Up] [Print Copy]
  [Question]   Re: [?] Lỗi khi sử dụng Gtk lib trên linux 17/03/2008 09:12:55 (+0700) | #7 | 119697
[Avatar]
freakmind
Member

[Minus]    0    [Plus]
Joined: 26/11/2007 02:53:23
Messages: 79
Offline
[Profile] [PM]
Thực ra cái chuyển từ chữ thường thành hoa chỉ là cái để mình test thôi, bài mình phải làm là cái khác, và trong bài mình sẽ thay thế hàm modify bằng một hàm khác ( nói chung phức tạp hơn và chắc là cũng kô cần phải động đến dòng text đầu vào ) , tuy nhiên mình muốn tìm cách khắc phục lỗi convert từ unicode sang ANSI thôi. Chẳng lẽ kô có cách nào để chuyển đi chuyển lại giữa unicode và ANSI trong C ?? ( gtk đc viết cho C mà định dạng text trong C là ANSI thì đáng lẽ ra kiểu dữ liệu text của gtk phải là ANSI chứ sao lại là unicode nhỉ smilie )
[Up] [Print Copy]
  [Question]   Re: [?] Lỗi khi sử dụng Gtk lib trên linux 17/03/2008 09:57:52 (+0700) | #8 | 119703
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
có lẽ do bạn chưa rõ về sự khác nhau của ansi - utf8 - unicode rồi. bạn có để ý rằng lỗi trên chỉ sinh ra khi bạn nhập vào các kí tự none ansi ? (tiếng việt có dấu chẳng hạn), bởi vì khi đó hàm modify text của bạn đã convert kí tự sang mã không hợp lệ (ê -32 not become to Ê) , vì thế ở console mới có error print ra. Tớ nghĩ nếu bạn muốn thao tác với các kí tự trong text lấy được từ ô nhập thì nên chuyển nó từ utf8 sang unicode. Bạn có thể đọc thêm về các loại encode này để rõ hơn tại sao.
[Up] [Print Copy]
  [Question]   Re: [?] Lỗi khi sử dụng Gtk lib trên linux 17/03/2008 10:08:38 (+0700) | #9 | 119705
[Avatar]
freakmind
Member

[Minus]    0    [Plus]
Joined: 26/11/2007 02:53:23
Messages: 79
Offline
[Profile] [PM]
Đúng là mình chưa hiểu rõ về các loại encode lắm, để mình tìm hiểu thêm vậy, thx nhé smilie (à mà lỗi trên kô fát sinh do mình truyền Tiếng việt có dấu vào đâu, đối truyền vào của mình là char *text ,và mình debug thì thấy lỗi là ở câu lệnh này cơ
Code:
gtk_text_buffer_set_text (buffer, text, -1);

Còn việc lấy text từ text box thì ngon rùi kô có lỗi gì cả )
[Up] [Print Copy]
  [Question]   Re: [?] Lỗi khi sử dụng Gtk lib trên linux 17/03/2008 10:41:22 (+0700) | #10 | 119709
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]

freakmind wrote:
Đúng là mình chưa hiểu rõ về các loại encode lắm, để mình tìm hiểu thêm vậy, thx nhé smilie (à mà lỗi trên kô fát sinh do mình truyền Tiếng việt có dấu vào đâu, đối truyền vào của mình là char *text ,và mình debug thì thấy lỗi là ở câu lệnh này cơ
Code:
gtk_text_buffer_set_text (buffer, text, -1);

Còn việc lấy text từ text box thì ngon rùi kô có lỗi gì cả ) 


hihi, thì đúng vậy mà, cái text bạn lấy ra thì ổn vì chỉ là lấy ra thôi mà, khi bạn modify rồi set ngược vào khi đó nó mới phát hiện ra có kí tự không hợp lệ nên mới in ra đó chứ.
bạn thử test trong hàm modifytext không làm gì cả, chỉ return text; không thôi, khi đó nó chỉ làm việc đơn thuần là copy text từ dưới lên ô phía trên, chưa bị làm sai về encode thì chạy thoải mái không có lỗi nào cả.
[Up] [Print Copy]
  [Question]   Re: [?] Lỗi khi sử dụng Gtk lib trên linux 18/03/2008 10:23:00 (+0700) | #11 | 119878
[Avatar]
freakmind
Member

[Minus]    0    [Plus]
Joined: 26/11/2007 02:53:23
Messages: 79
Offline
[Profile] [PM]
ok để mình nghĩ cách khắc phục, dù gì thì bt của mình làm cũng kô cần phải modify cái text này, thx nhé smilie
[Up] [Print Copy]
  [Question]   Re: [?] Lỗi khi sử dụng Gtk lib trên linux 18/03/2008 13:16:29 (+0700) | #12 | 119898
[Avatar]
freakmind
Member

[Minus]    0    [Plus]
Joined: 26/11/2007 02:53:23
Messages: 79
Offline
[Profile] [PM]
Hix cái gtk này lại phát sinh vấn để là làm thế nào để link nó với thư viện khác mà mình đã viết sẵn, em tìm mãi mà kô thể thấy đc smilie
Không thể biết đc là phải gcc thế nào nữa smilie
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|