Comment puis-je encoder correctement les caractères accentués étrangers dans l'application ASP.NET MVC / SQL (exemples CRU s'il vous plaît)

Quelle est la meilleure pratique pour lire / sauvegarder / mettre à jour les caractères accentués via HTML / MVC / LINQ-to-SQL?

Nous avons une application web où les users soumettent des articles de partout dans le monde. Certains users, en particulier ceux d'Europe, soumettent des articles avec des caractères accentués / étendus. Nous utilisons Linq to SQL, C #, SQL 2005. Toutes nos tables db sont normalisées et Linq to SQL est utilisé comme couche de mappage de données.

Le bug que nous voulons corriger est que dans notre application MVC3 / SQL 2005, les caractères accentués dans les mots soumis par les users via la normale

using (Html.BeginForm()) {... } 

bloc à un controller [HttpPost] atsortingbué sont rendus comme '?' sur l'événement Save. Par exemple, tout fonctionne bien jusqu'à ce que les caractères étrangers soient entrés, dans ce cas, nous pourrions avoir un logging qui parle de "Proven? Al activités" dans la DB.

Quelle est la meilleure pratique pour les encoder de manière MVC3, SQL2005-ish?

J'apprécierais vraiment si quelqu'un a décrit les opérations de création, de lecture et de mise à jour pour quelque chose comme ceci, ou dites-moi quelle chose magique je manque. Merci pour tout conseil!

Vous devez utiliser

  • Types nvarchar (pas varchar)
  • littéraux avec le préfixe N par exemple WHERE x = N'foo'

Exemple: seul le préfixe N + nvarchar sauve OK

 DECLARE @test TABLE (Broken varchar(10), Working nvarchar(10)) INSERT @test VALUES (N'Value 化化', N'Value 化化') INSERT @test VALUES ('Value ける', 'Value ける') SELECT * FROM @test 

Il n'y a pas de magie globale non plus …

Modifier:

Je cours également le profileur SQL pour voir si vous envoyez des caractères
Je soupçonne maintenant que vous êtes casser des choses avant qu'il frappe la database.

Prenant Europe de l'Ouest (DE + FR + Nordics) cela fonctionne bien sans mes suggestions ci-dessus

 DECLARE @test TABLE (NowWorking varchar(10), Working nvarchar(10)) INSERT @test VALUES (N'öéäàüè', N'öéäàüè') INSERT @test VALUES ('öéäàüè', 'öéäàüè') SELECT * FROM @test