Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 处理'中的空字符;文本';带有Rails和Postgresql的字段_Ruby On Rails_Utf - Fatal编程技术网

Ruby on rails 处理'中的空字符;文本';带有Rails和Postgresql的字段

Ruby on rails 处理'中的空字符;文本';带有Rails和Postgresql的字段,ruby-on-rails,utf,Ruby On Rails,Utf,我最近在rails应用程序上进行了一轮各种输入的测试,发现了如何处理传入请求中的空字符的问题。我的应用程序由Postgresql 8.4数据库支持。事实证明,Postgresql不支持在标准的“text”或“varchar”字段中存储空字符。但是,当我试图通过rails存储一个包含空字符的字符串时,默认行为似乎是在空字符之后截断该字符串。我认为这是一个问题,因为字符串是在截断发生之前验证的。插入空字符可以绕过长度之类的验证,因为ruby可以很好地处理它们,而截断只发生在插入时 我正试图找出处理这

我最近在rails应用程序上进行了一轮各种输入的测试,发现了如何处理传入请求中的空字符的问题。我的应用程序由Postgresql 8.4数据库支持。事实证明,Postgresql不支持在标准的“text”或“varchar”字段中存储空字符。但是,当我试图通过rails存储一个包含空字符的字符串时,默认行为似乎是在空字符之后截断该字符串。我认为这是一个问题,因为字符串是在截断发生之前验证的。插入空字符可以绕过长度之类的验证,因为ruby可以很好地处理它们,而截断只发生在插入时


我正试图找出处理这些输入的最佳方法。对我来说,理想的行为是在处理无效UTF-8字节时抛出异常。现在,我能想到的唯一选择是显式地检查每个输入字符串中的空字符。我更希望有一个通用的方法,但我甚至不知道从哪里开始寻找。是否可以通过修补postgresql适配器来检查这一点?还是我缺少了一些标准方法?

谁在截断字符串?PostgreSQL?轨道?机架?谢天谢地,如果你将无效数据交给PostgreSQL,它往往会大声抱怨;我猜零字节甚至从来没有出现在您的模型中。从我的测试来看,似乎Rails->PostgreSQL适配器(pg gem)正在进行截断,因为我在Rails模型中看到了零字节,并且我没有得到我期望从PostgreSQL中得到的错误。您考虑过使用二进制数据类型(即
bytea
)对于存储二进制数据?我考虑过,但总体来说,这会使事情变得更加困难,因为我必须手工完成所有的编码/解码。从根本上说,我确实希望存储文本。我只是在协调rails和postgresql对UTF-8的定义时遇到了问题。没有人对UTF-8的定义允许零字节。UTF-8中没有零字节。曾经如果您有零字节,那么您就有包含嵌入式UTF-8文本的二进制数据。