webForumDet fria alternativet

ÅÄÖ i Ruby

Webbutveckling

18 svar · 2 299 visningar · startad av pirajan

Medlem sedan apr. 2001246 inlägg
Frågan#1

Har problem att få till ÅÄÖ. Har sökt runt utan bra resultat. Hur får jag till ÅÄÖ. Det gäller inte bara data från databasen, utan även vanlig HTML i views.

Min testmiljö är Windows, men det ska väl inte spela nån roll eller?

Gislaved, har du hittat något ännu? Måste väl åndå finnas nåt därute!?

Medlem sedan dec. 200471 inlägg
#2

För att få åäö att fungera fick jag dels installera swe-rails(http://os.ki.se/swe_rails.html) samt köra in kod i applicationkontrollern enligt http://www.rubyonrails.se/rails/show/Använda+ISO-8859-1 . Se även http://www.rubyonrails.se/rails/show/Railstips+för+svenska+applikationer . Har dock hört att swe-rails i vissa fall kan ställa till det med ajax-requests.

Medlem sedan nov. 20041 740 inlägg
#3

Jag kör med följande, och ser till att texteditorn jobbar i UTF-8 (jag använder Textmate, så det är standardläget).

database.yml:

development: 
      adapter: mysql
      database: din_databas
      encoding: utf8
      osv ...

application.rb

after_filter :swedish_chars

def swedish_chars
   @headers["Content-Type"] ||= "text/html; charset=UTF-8" 
end

I din layoutnamn.rhtml:

 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
 </head>

Jag har varit i kontakt med utvecklaren av swe_rails, men vi har inte kunnat hitta vad det är som ställer till det för IE + ajax. Så länge fungerar denna lösning bra, även om swe_rails gör mycket mer än bara fixar till charset.

Medlem sedan dec. 200471 inlägg
#4

Jag testade att slänga bort swe_rails och köra enligt dina metoder Gislaved. Nu blir det enbart rätt tecken för data som hämtas via databasen, inte tecken som skrivits in manuellt inom html-taggar.

Jag har:
1. Ställ om RadRails (kör windows) att enbart arbeta i utf-8 format.
2. Lagt till 'encoding: utf8' i database.yml
3. Slängt in nedan kod i application.rb:

after_filter :set_charset

  def set_charset
    content_type = @headers["Content-Type"] || 'text/html'
    if /^text\//.match(content_type)
      @headers["Content-Type"] = "#{content_type}; charset=utf-8" 
    end
  end

4. Satt <meta http-equiv="content-type" content="text/html; charset=utf-8" /> i <head></head> på application.rhtml (layout-filen).

Utöver att visa massa felaktiga tecken så fungerar sidan heller inte i IE (inget renderas, dock finns hela källkoden där). Har du någon erfarenhet av detta sedan tidigare? Dels att den visar data rätt men vanlig text fel och/eller att sidan inte vill renderas i IE? Hade varit jävligt skönt att få rätt på detta nu, börjar bli rätt trött på allt trixande för att få Ror att fungera dugligt.

EDIT:
Vid en närmare inspektion av koden som skickas till IE så skickas vanlig text med rätt tecken, medan data skickas med fel tecken - tvärtemot FF/Opera. Vad i helvete?

Medlem sedan apr. 2001246 inlägg
#5

Hittade detta på http://rails.se/rails/show/Använda+ISO-8859-1 :

	after_filter :set_charset

	def set_charset
	  content_type = @headers["Content-Type"] || 'text/html'
	  if /^text\//.match(content_type)
	    @headers["Content-Type"] = "#{content_type}; charset=iso-8859-1" 
	  end
	end

funkade finfint! Nu vidare till fixandet!

Medlem sedan nov. 20041 740 inlägg
#6

En gissning är att RadRails använder utf-8 på enbart nya filer, inte befintliga. Blir det samma sak om du skapar en ny fil?
Alternativt kan man ersätta åä och ö med deras html-motsvarighet &aring etc.

Vid en närmare inspektion av koden som skickas till IE så skickas vanlig text med rätt tecken, medan data skickas med fel tecken - tvärtemot FF/Opera.

Vad händer om du byter ut application.rb mot

after_filter :set_charset

def set_charset
   @headers["Content-Type"] ||= "text/html; charset=UTF-8" 
end

Förresten, du har inte valt att använda någon speciell teckenkodning i dina webbläsare? Man kan ju "tvinga" webbläsaren att köra annat än vad webbsidan säger.

Medlem sedan nov. 20041 740 inlägg
#7

funkade finfint! Nu vidare till fixandet!

Då lyckades du inte få RadRails att använda UTF-8 på befintliga filer, helt enkelt. :)

Bra att det fungerade.

Medlem sedan apr. 2001246 inlägg
#8

Gislaved skrev:

Då lyckades du inte få RadRails att använda UTF-8 på befintliga filer, helt enkelt. :)

Bra att det fungerade.

Kör SciTE, inte RadRails. Antar att du kör Mac, Gislaved. Har funderingar på att gå över antingen till Mac, eller Linux. ASP.NET har länge varit min starka sida, men börjar nu inse att Rails går vesäntligt (hur stavas det?) mycket SNABBARE att utveckla i vad gäller webbmiljö.

Medlem sedan nov. 20041 740 inlägg
#9

pirajan skrev:

Kör SciTE, inte RadRails. Antar att du kör Mac, Gislaved.

Ah, sorry. Jag blandade ihop er.

Japp, jag utvecklar på en PowerBook och det är mycket trevligt ihop med Ruby on Rails.

Medlem sedan apr. 2001246 inlägg
#10

Har hört mycket bra om TextMate och Mac med Ruby. Är det verkligen så bra som alla påstår?

Medlem sedan nov. 20041 740 inlägg
#11

pirajan skrev:

Har hört mycket bra om TextMate och Mac med Ruby. Är det verkligen så bra som alla påstår?

Jag har provat en hel del olika editorer, och skulle i nuläget inte byta bort TextMate mot någon annan som finns på marknaden idag. Men du måste nog prova själv för att se om du gillar det, det finns många bra editorer som passar lite olika behov.

Medlem sedan dec. 200471 inlägg
#12

Gislaved skrev:

Då lyckades du inte få RadRails att använda UTF-8 på befintliga filer, helt enkelt. :)

Hah, stämde på pricken det du sa. Testade att slänga ihop ett nytt railsprojekt och å, ä och ö fungerade utmärkt både avseende data och vanlig text. Nu renderas det i IE som det ska med (måste ha varit en konflikt mellan charsetsen som fick IE att balla ur). Tackar ödmjukast!

Medlem sedan nov. 20041 740 inlägg
#13

Det verkar som om nästa version av Rails (1.2) har betydligt bättre stöd för UTF-8 direkt från starten. Programspråket Ruby självt får vi dock vänta ytterligare ett år på att få uppdaterat.

http://weblog.rubyonrails.com/2006/11/23/rails-1-2-release-candidate-1

Medlem sedan apr. 2001246 inlägg
#14

Ajajaj... Testade lite form_remote_tag och vips så blir det fel. Postar åäö och i databasen läggs det till åäö. Vad göra?

Medlem sedan nov. 20041 740 inlägg
#15

Kör med UTF-8, det har eliminerat all huvudvärk jag har haft med teckenkodningar. Alla ajax-anrop skickas som UTF-8, så antingen får du göra om dem till ISO-8859-1 eller så kör du helt i UTF-8.

Medlem sedan apr. 2001246 inlägg
#16

Det är precis det jag gör.
i head:

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />

i application.rb

	after_filter :set_charset

	def set_charset
		content_type = @headers["Content-Type"] || 'text/html'
		if /^text\//.match(content_type)
			@headers["Content-Type"] = "#{content_type}; charset=utf-8" 
		end
	end

MySQL-tabellerna är satta till UTF-8 också..

Medlem sedan apr. 2001246 inlägg
#17

Nu renderas layouterna rätt, men inte templates/view...

Medlem sedan nov. 20041 740 inlägg
#18

Är du säker på att du inte har några filer/databasinlägg med ISO-8859-1 kvar? Är anslutningen mot databasen i UTF-8?

Medlem sedan apr. 2001246 inlägg
#19

Ledsen att jag tog upp er tid.. :) Upptäckte att mitt DW inte alls var inställt på UTF-8. Tack för hjälpen!

277 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
150 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)